以下是相关问题,它们基本上询问的是同样的事情,但是它们的答案对我不起作用:
我想通过ssh连接到远程机器并运行一个命令。例如:
ssh <user>@<ipv6-link-local-addr>%eth0 sudo service fooService status
问题是我正在尝试使用仅标准库的Python脚本来完成此操作(没有pexpect)。我一直在尝试使用subprocess模块让它工作,但是当请求密码时,调用communicate始终会阻塞,即使我已将密码作为参数提供给communicate。例如:
proc = subprocess.Popen(
[
"ssh",
"{testUser1}@{testHost1}%eth0".format(**locals()),
"sudo service cassandra status"],
shell=False,
stdin=subprocess.PIPE)
a, b = proc.communicate(input=testPasswd1)
print "a:", a, "b:", b
print "return code: ", proc.returncode
我已经尝试了上述的几种变体(例如,删除“input=”,添加/删除对stdout和sterr的subprocess.PIPE分配)。然而,结果总是出现相同的提示:
ubuntu@<ipv6-link-local-addr>%eth0's password:
我漏掉了什么?还是有其他使用Python标准库来实现它的方法吗?