【发布时间】:2013-02-16 11:59:30
【问题描述】:
我正在尝试使用subprocess.Popen 运行scp(安全复制)命令。登录需要我发送密码:
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.
我确定密码是正确的。我通过在 shell 上手动调用 scp 来轻松验证它。那么为什么这不起作用呢?
注意,有很多类似的问题,询问subprocess.Popen和发送自动SSH或FTP登录密码:
How can I set a users password in linux from a python script?
Use subprocess to send a password
这些问题的答案不起作用和/或不适用,因为我使用的是 Python 3。
【问题讨论】:
-
我不熟悉这段代码,但你尝试使用 -p 参数?也是作为验证方法的密钥交换?
-
-p 我的意思是“-p mypassword user@10.0.1.12:/foo/bar/somefile.txt”我不知道你能不能这样做
-
@diego2k 据我所知,scp 不接受通过命令行输入密码的开关(它的手册页不包含任何内容)。一般来说,在命令行上提供密码不是一个好习惯,因为这将被记录在 .bash_history
-
或许您可以通过创建
authorized_keys文件来解决此问题。 -
如果您要复制
.(一个目录),scp不需要-r吗?如果您正在努力让pexpect工作,我在下面添加了一个功能应该会有所帮助。
标签: python linux ssh python-3.x subprocess