我正在尝试以下
from subprocess import Popen, PIPE
Popen(["scp", "-B","user@url:file", "."], stdin=PIPE, shell=False).communicate(input="password")
但我仍然获得密码promt,并且没有发送密码。 我知道我可以使用scp键,但这不是我需要的。
任何帮助?
答案 0 :(得分:2)
scp 直接与终端进行交互,而不是从 STDIN 读取,你不能通过管道传递密码,它对scp的安全性很重要而且它是一样的对于sftp,ssh。
你可以在这样的终端尝试它(它不会起作用):
echo "password" | scp me@localhost:test .
答案 1 :(得分:1)
正如其他人所说,scp(和ssh)直接从控制台而不是stdin读取密码,因此使用子进程发送密码将不起作用。您可以使用pexpect - 请参阅文档和大量示例,了解如何执行此操作。