次のコードを使用して、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秒)をブロックします。
ブロックを回避する方法について誰かアドバイスをいただけますか?