我经历了多个有类似问题的线程(使用子进程发送密码)并尝试了很多东西,但我仍然无法让它工作。基本上我想将我的 ssh 密钥推送到一堆机器上,我正在尝试使用subprocess
. 但不知何故subprocess.Popen
无法获得密码,因此卡住了。
以下是我尝试过的一些事情。
from subprocess import Popen, PIPE
p = Popen(['ssh-copy-id', 'testbox1'], stdin=PIPE, stdout=PIPE).communicate(input=b'mypassword')
我还尝试通过写入进程的标准输入通道来提供密码,如下所示
p.stdin.write(b'mypassword')
p.stdin.flush()
我在 python 2.7 和 python 中都试过了,但是没有用。我也尝试在密码后提供换行符,但即使这样也没有用。我不确定我在这里缺少什么。
我知道人们已经建议使用Pexpect
这个,但我更想知道为什么subprocess
不能处理这个。
我知道有多个库,例如Paramiko
并且也fabric
可以轻松处理远程连接,但我认为在这种情况下不能使用它,因为我不是直接连接ssh
到机器,而是使用ssh-copy-id
来自本地机器的命令