【问题标题】:using pexpect and openconnect to bring up a vpn connection使用 pexpect 和 openconnect 建立一个 vpn 连接
【发布时间】:2018-08-03 20:17:59
【问题描述】:

我正在尝试创建一个能够建立 vpn 连接的脚本。我从这个question 建模了我的脚本,它可以很好地用于我的目的,但我发现一旦我关闭脚本,vpn 连接就会中断。 当使用“-b”选项时,我在 child.read() 的末尾得到以下信息:

已建立 DTLS 连接(使用 GnuTLS)。密码套件 (DTLS0.9)-(RSA)-(AES-256-CBC)-(SHA1)。\r\nSSL 操作已取消\r\n用户已从会话中分离 (SIGHUP);正在退出。\r\n'

这是我的代码:

import os, sys, subprocess, time, re, pexpect
import signal

def signal_handler(sig, frame):
        print("sigHUUUUUP")
        sys.exit

child = pexpect.spawn('sudo openconnect -b --script /etc/vpnc/vpnc-script remote.host')

child.expect('.*')
child.sendline('yes')

child.expect('.*')
child.sendline('ipsec')

child.expect('.*')
child.sendline('username')

child.expect('.*')
child.sendline('password')
signal.signal(signal.SIGHUP, signal_handler)
time.sleep(15)

我非常喜欢留在 python 中,但我对其他运行 openconnect 并为其提供预期密码的方式持开放态度。主要是寻找一种无需连续运行脚本即可设置 vpn 的方法。

我尝试过使用 ignore_sighup=True 但这不起作用。

【问题讨论】:

  • expect('.*') 通常不正确。 .* 可以匹配任何内容,包括任何内容(空字符串)。
  • 是的,我知道 - 但这不会导致问题,因为密码已被接受并且 vpn 在 SIGHUP 调用发生之前连接了一秒钟

标签: python linux python-3.x pexpect


【解决方案1】:

我找到了实现我想要的方法:

import os, sys, subprocess, time, re, pexpect
import signal

def signal_handler(sig, frame):
        print("sigHUUUUUP")
        sys.exit

child = pexpect.spawn('sudo screen openconnect remote.host')

child.expect('.*')
child.sendline('yes')

child.expect('.*')
child.sendline('ipsec')

child.expect('.*')
child.sendline('username')

child.expect('.*')
child.sendline('password')
child.sendline('\01d')

我将屏幕添加到我的生成线并添加了“child.sendline('\01d')” 我希望这不是实现这一目标的唯一方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2020-06-18
    • 2013-01-14
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    相关资源
    最近更新 更多