我正在尝试使用 Putty SCP 程序将文件复制到服务器。我正在使用 Python 子进程启动它:
subprocess.check_output(pscp + ' -r -l ' + self._properties['ssh user'] + ' -pw ' + self._properties['ssh password'] + ' -4 -batch ' + local_path + ' ' + self._properties['ssh user'] + '@' + self._properties['target ip'] + ':' + destination_dir)
正确解析为以下命令:
pscp -r -l root -pw password -4 -batch projects\packages\controller-fw\build\packager\controller-fw-iMx6-release [email protected]:/root/temp
我看到的是它中止了连接:
error 26-Apr-2019 14:35:28 The server's host key is not cached in the registry. You
error 26-Apr-2019 14:35:28 have no guarantee that the server is the computer you
error 26-Apr-2019 14:35:28 think it is.
error 26-Apr-2019 14:35:28 The server's ssh-ed25519 key fingerprint is:
error 26-Apr-2019 14:35:28 ssh-ed25519 255 b9:a3:75:d7:c5:73:68:37:5d:6c:d1:61:6f:57:b4:ab
有没有办法自动接受 SSH 密钥?我曾希望使用 -batch 选项可以解决此问题,但它所做的只是使其中止。我研究过在它之前进行调用plink
,但从手册中不清楚它的行为会有什么不同。有没有正确的方法来做到这一点?
就在人们询问之前,我已放弃使用 Paramiko,因为它的性能不佳。它需要 5 分钟以上才能上传文件,而 FileZilla 只需 30 秒即可完成。
答案1
使用-hostkey
转变指定预期主机密钥的指纹:
pscp.exe -hostkey aa:bb:cc... ...
答案2
我最终添加了一个 plink 调用,并将输入通过管道传输到其中:
subprocess.check_call('echo y | ' + plink + ' -l ' + self._properties['ssh user'] + ' -pw ' + self._properties['ssh password'] + ' -ssh ' + self._properties['ssh user'] + '@' + self._properties['target ip'] + ' "echo > /dev/null"', shell=True)
这导致在不执行任何操作的情况下运行 plink,并在提示存储密钥时向其发送接受。这感觉有点像临时解决方案,但似乎可以正常工作。