SCP通过Python Subprocess Popen:“身份文件无法访问”

时间:2018-04-30 17:39:11

标签: python python-3.x subprocess popen scp

从subprocess.popen执行SCP时,我收到错误:Warning: Identity File ./id_rsa.key not accessible: no such file or directory.问题解释如下。

我希望SCP使用python脚本从本地计算机到远程计算机的文件,并且我想指定在执行SCP时使用的密钥(使用-i选项)。

我的本​​地计算机是Windows 10 Enterprise。我的“远程”机器目前是在我的localhost上运行Alpine linux的Docker容器。

当我在高架shell中运行命令时,它可以工作:

scp -i ./id_rsa.key -P 2222 ./test.plan root@127.0.0.1:/go/

当我通过Python 3.6 subprocess.popen:

执行命令时
SSH = subprocess.Popen(['scp', '-i ./id_rsa.key', '-P 2222', './test.plan', 'root@127.0.0.1:/go/'],
    cwd = r'C:\ThePathToThisStuff',
    shell = False,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE
)

它提示我输入密码root@127.0.0.1's password:,当我输入密码时,它会抛出下面的错误,表明它无法找到RSA密钥:

<_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'> ERROR: [b'Warning: Identity file  ./id_rsa.key not accessible: No such file or directory.\n']

我尝试提供密钥的绝对路径,将参数列表中的每个命令分隔为选项和值,不同的分组等。

1 个答案:

答案 0 :(得分:3)

您不应将选项及其参数组合在同一参数中,它们必须是单独的列表元素。

SSH = subprocess.Popen(['scp', '-i', './id_rsa.key', '-P', '2222', './test.plan', 'root@127.0.0.1:/go/'],