Python:执行scp时,stdin密码无效
我正在尝试以下操作:
from subprocess import Popen, PIPE
Popen(["scp", "-B","user@url:file", "."], stdin=PIPE, shell=False).communicate(input="password")
但是我还是收到了密码提示,并且没有发送任何密码。我知道我可以用密钥来使用scp,但这不是我需要的。
有没有人能帮帮我?
2 个回答
1
正如其他人所说,scp(和ssh)是直接从控制台读取密码,而不是从标准输入(stdin)读取,所以用子进程来发送密码是行不通的。你可以使用pexpect来解决这个问题——可以查看文档和很多例子来了解怎么做。
2
scp 是直接和终端进行交互的,而不是从 STDIN 读取数据。这意味着你不能通过管道传递密码,这是出于安全考虑,sftp 和 ssh 也是这样。
你可以在终端里试试这样做(但它不会成功):
echo "password" | scp me@localhost:test .