【发布时间】: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