subprocess.Popen продолжает спрашивать пароль для команды ssh-copy-id - PullRequest
0 голосов
/ 28 ноября 2018

Я перебрал несколько тем, в которых есть похожие вопросы ( Используйте подпроцесс для отправки пароля ) и перепробовал множество вещей, но я все еще не могу заставить его работать.По сути, я хочу отправить свои 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 с моей локальной машины

1 Ответ

0 голосов
/ 28 ноября 2018

Казалось, что это было сложно для обработки с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...