pysftp - paramiko SSHException,来自服务器的错误主机密钥

时间:2016-07-13 22:25:58

标签: python ssh sftp paramiko pysftp

我正在尝试通过apiEndpoints_1.ENDPOINT 连接到远程主机:

pysftp

然而,我得到一个奇怪的例外,我找不到太多细节。

try:
    with pysftp.Connection(inventory[0], username='transit',
                           private_key='~/.ssh/id_rsa.sftp', port=8055) as sftp:
        sftp.put('/home/me/test.file')
except Exception, err:
    print sys.exc_info()
    print err

我发现了一个相关的问题,建议我运行(<class 'paramiko.ssh_exception.SSHException'>, SSHException('Bad host key from server',), <traceback object at 0x7fa76269c5a8>) Bad host key from server 来替换ssh-keygen -R [host]文件中的密钥 - 一旦我这样做,我就收到了一个新错误:

known_hosts

现在,如果我尝试ssh到这个主机,它会再次提示我相信该密钥将被放回我的(<class 'paramiko.ssh_exception.SSHException'>, SSHException('No hostkey for host abc.com found.',), <traceback object at 0x7f6b8520cb48>) No hostkey for host abc.com found. 文件中,我接受并且可以很高兴地将其放到盒子上。完成此步骤后,如果我再次尝试运行脚本,则会收到原始错误known_hosts

我在这里做错了吗?

ninja edit :我应该提到终端的以下工作正常:

Bad host key from server

Paramiko调试输出

sftp -i .ssh/id_rsa.sftp -oPort=8055 user@host.com
sftp> put /home/me/test.file

3 个答案:

答案 0 :(得分:5)

解决方法

这似乎是pysftp包装器的某种错误...我不确定。恢复原生paramiko让我联系得很好,所以我现在就开始了。目前的工作代码:

rsa_key = paramiko.RSAKey.from_private_key_file('~/.ssh/the_key', password='myPassword')
transport = paramiko.Transport((inventory[0],8055))
transport.connect(username='theUser', pkey=rsa_key)
sftp = paramiko.SFTPClient.from_transport(transport)
print sftp.listdir()

答案 1 :(得分:1)

对我来说,一旦我将主机公共密钥加载到.ssh \ known_hosts中,该菜谱示例就可以工作了。

但是,我不记得曾被提示将主机公共密钥保存到我的.ssh \ known_hosts文件中。

This link是帮助我了解主机公钥与我自己的公钥/私钥对分开的原因。我正在使用exavault,它们提供了公钥/私钥对,但没有提供主机公钥。

我在Windows上使用git bash使用ssh-keyscan:

$ ssh-keyscan example.com
# example.com SSH-2.0-OpenSSH_5.3
example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQAB...

,然后将密钥复制到我的known_hosts文件中。然后它与pysftp 0.2.9一起工作。

答案 2 :(得分:0)

我遇到了类似的问题,对我来说,问题在于主机ssh密钥已更改,而我的known_hosts文件包含旧的密钥,因此要对其进行修复,请运行:

ssh-keygen -f /Users/myUserName/.ssh/known_hosts -R myhost.com

显然,您需要使用您的known_hosts文件的路径以及您的主机名或IP。