Python: выполнение scp, stdin для пароля не работает - PullRequest
1 голос
/ 10 ноября 2010

Я пытаюсь следующее

from subprocess import Popen, PIPE
Popen(["scp", "-B","user@url:file", "."], stdin=PIPE, shell=False).communicate(input="password")

Но я все равно получаю запрос пароля, и пароль не отправляется. Я знаю, что могу использовать scp с ключами, но это не то, что мне нужно.

Любая помощь?

Ответы [ 2 ]

2 голосов
/ 10 ноября 2010

scp взаимодействует с терминалом напрямую, а не читает из STDIN . Вы не можете передать пароль по каналу, это важно для scp и то же самое для sftp, ssh.

вы можете попробовать это в своем терминале, как это (и это не будет работать):

echo "password" | scp me@localhost:test .
1 голос
/ 10 ноября 2010

Как уже говорили другие, scp (и ssh) считывают пароль непосредственно из консоли вместо стандартного ввода, поэтому использование подпроцесса для отправки пароля не будет работать.Вместо этого вы можете использовать pexpect - смотрите документацию и многочисленные примеры того, как это сделать.

...