【发布时间】:2011-09-20 00:59:59
【问题描述】:
我正在尝试使用以下代码通过 pexpect 设置 ssh 隧道:
#!/bin/env python2.4
import pexpect, sys
child = pexpect.spawn('ssh -CfNL 0.0.0.0:3306:127.0.0.1:3306 user@server.com')
child.logfile = sys.stdout
while True:
code = child.expect([
'Are you sure you want to continue connecting \(yes/no\)\?',
'password:',
pexpect.EOF,
pexpect.TIMEOUT
])
if code == 0:
child.sendline('yes')
elif code == 1:
child.sendline('passwordhere')
elif code == 2:
print ".. EOF"
break
elif code == 3:
print ".. Timeout"
break
我希望在发送密码并建立 ssh 隧道后,退出 while 循环,以便我可以继续处理其他业务逻辑。
但如果 ssh 隧道建立,上面的代码会阻止 util 超时(大约 30 秒)。
谁能给我一些关于如何避免阻塞的建议?
【问题讨论】:
-
你愿意在没有密码的情况下使用ssh key auth吗?
-
感谢您的评论。使用密钥进行 ssh 身份验证是可以的,但这能解决这个问题吗?恐怕问题是因为ssh进程在auth通过后没有立即退出。
标签: python pexpect ssh-tunnel