一尘不染

使用子进程通过SSH或SCP发送密码

linux

我正在尝试使用运行 scp
(安全副本)命令subprocess.Popen。登录名要求我发送密码:

from subprocess import Popen, PIPE

proc = Popen(['scp', "user@10.0.1.12:/foo/bar/somefile.txt", "."], stdin = PIPE)
proc.stdin.write(b'mypassword')
proc.stdin.flush()

这立即返回错误:

user@10.0.1.12's password:
Permission denied, please try again.

确定 密码正确。我可以通过scp在外壳上手动调用来轻松验证它。那为什么不起作用呢?

请注意,有许多与此类似的问题,询问subprocess.Popen并发送用于自动SSH或FTP登录的密码

这些问题的答案不起作用和/或不适用,因为我使用的是Python 3。


阅读 292

收藏
2020-06-03

共1个答案

一尘不染

您链接的第二个答案建议您使用Pexpect(这通常是与需要输入的命令行程序进行交互的正确方法)。它的一个分支适用于python3,您可以使用它。

2020-06-03