Python:执行scp时,stdin密码无效

1 投票
2 回答
3445 浏览
提问于 2025-04-16 06:50

我正在尝试以下操作:

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 读取数据。这意味着你不能通过管道传递密码,这是出于安全考虑,sftpssh 也是这样。

你可以在终端里试试这样做(但它不会成功):

echo "password" | scp me@localhost:test .

撰写回答