Я перебрал несколько тем, в которых есть похожие вопросы ( Используйте подпроцесс для отправки пароля ) и перепробовал множество вещей, но я все еще не могу заставить его работать.По сути, я хочу отправить свои ssh-ключи на кучу машин, и я пытаюсь сделать это с помощью subprocess
.Но каким-то образом subprocess.Popen
не удается получить пароль, и, следовательно, он застревает.
Ниже приведены некоторые примеры, которые я пробовал.
from subprocess import Popen, PIPE
p = Popen(['ssh-copy-id', 'testbox1'], stdin=PIPE, stdout=PIPE).communicate(input=b'mypassword')
Я также попытался ввести пароль, написав вКанал stdin процесса, как показано ниже
p.stdin.write(b'mypassword')
p.stdin.flush()
Я пробовал это как в Python 2.7, так и в Python, и это не сработало.Я также пытался обеспечить перевод строки после пароля, но даже это не сработало.Я не уверен, что мне здесь не хватает.
Я знаю, что люди предложили использовать для этого Pexpect
, но, опять же, мне больше нравится знать, почему subprocess
не может справиться с этим.
Я знаю, что есть несколько библиотек, таких как Paramiko
, а также fabric
, которые с большой легкостью обрабатывают удаленные соединения, но я не думаю, что это можно использовать в этом случае, поскольку я не являюсь напрямую ssh
подключаясь к машине и используя команду ssh-copy-id
с моей локальной машины