我正在尝试通过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
sftp -i .ssh/id_rsa.sftp -oPort=8055 user@host.com
sftp> put /home/me/test.file
答案 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。