【发布时间】:2017-07-22 07:28:50
【问题描述】:
我有以下代码(更新为包含 pexpect):
import sys
import subprocess
import pexpect
print "0"
ssh = subprocess.Popen("ssh -A -t username1@200.1.2.3 ssh -A -X username2@10.1.2.3",
shell = True,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE).communicate()
print "1"
child = pexpect.spawn(ssh)
print "2"
child.expect ('password')
print "3"
child.sendline ('password2')
print "4"
result = ssh.stdout.readlines()
if result == []:
error = ssh.stderr.readlines()
print >>sys.stderr, "ERROR: %s" % error
else:
print result
当我运行它时,我看到屏幕上显示了零,然后是密码提示。打印 One 的行永远不会执行,因此下面的 pexpect 代码也不会执行。我可以以用户身份输入密码,但它会挂起。当我用 Ctrl+C 杀死它时,在返回命令提示符之前会出现带有第二个密码提示的第二个登录横幅。有人可以解释如何捕获第一个密码提示,以便程序可以发送密码而不是用户吗?另外,有人可以解释一下为什么在我杀死程序之前我没有得到结果变量吗?
【问题讨论】:
-
我建议使用 ssh_keys 而不是写密码。您的生活会更轻松,同时也更安全。
-
不幸的是,这并不总是一种选择。我有一个应用需要连接到无法上传密钥的远程系统。