如何让 Putty SCP 不提示连接新设备?

如何让 Putty SCP 不提示连接新设备?

我正在尝试使用 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,并在提示存储密钥时向其发送接受。这感觉有点像临时解决方案,但似乎可以正常工作。

相关内容