gpt4 book ai didi

python - subprocess.Popen 不断询问 ssh-copy-id 命令的密码

转载 作者:行者123 更新时间:2023-12-01 08:40:32 24 4
gpt4 key购买 nike

我已经经历了多个有类似问题的线程( Use subprocess to send a password )并尝试了很多事情,但我仍然无法让它工作。基本上我想将我的 ssh key 推送到一堆机器,并且我正在尝试使用 subprocess 来做到这一点。但不知何故 subprocess.Popen 无法获取密码,因此卡住了。

以下是我尝试过的一些方法。

from subprocess import Popen, PIPE

p = Popen(['ssh-copy-id', 'testbox1'], stdin=PIPE, stdout=PIPE).communicate(input=b'mypassword')

我还尝试通过写入进程的标准输入 channel 来提供密码,如下所示

p.stdin.write(b'mypassword')
p.stdin.flush()

我在 python 2.7 和 python 中都尝试过这个,但没有成功。我还尝试在密码后提供换行符,但即使这样也不起作用。我不确定我在这里缺少什么。

我知道人们建议使用 Pexpect 来实现此目的,但我更想知道为什么 subprocess 无法处理这个问题。

我知道有多个库,例如 Paramikofabric 可以轻松处理远程连接,但我认为在这种情况下不能使用它我不是直接ssh连接到机器,而是使用本地机器上的ssh-copy-id命令

最佳答案

subprocess来处理似乎很棘手,因此我必须pexpect来解决这个问题,并且它在第一次运行中就起作用了。

import pexpect
from getpass import getpass

pwd = getpass("password: ")

child = pexpect.spawn('ssh-copy-id testbox1')
child.expect('.*ssword.*:')
child.sendline(pwd)
child.expect(pexpect.EOF, timeout=None)
cmd_show_data = child.before
cmd_output = cmd_show_data.split('\r\n')
for data in cmd_output:
print data

关于python - subprocess.Popen 不断询问 ssh-copy-id 命令的密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53521203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com