我有aws ssh密钥作为awskey.pem。我正在尝试使用pysftp向主机发送sftp。
import pysftp as sftp
keyfile='c:\\awskey.pem'
Cnopts=sftp.CnOpts()
Cnopts.hostkeys.load(keyfile)
srv=sftp.connection(host ='xx.xx.xx.xx',cnopts=Cnopts)
lpath='c:\\test.txt'
rpath='test.txt'
srv.put(lpath,rpath)
srv.close()当我收到错误时,似乎在读取pem文件时出现问题
'pysftp.exceptions.HostKeysException:找不到主机密钥‘
在搜索其他站点时,没有讨论密钥文件的格式。
不确定它是否应该是.pem格式,或者我必须将其转换为其他格式。
在这上面花了两天的时间之后,我已经不再领先了。
keyfile='c:\\awskey.pem'
srv=sftp.connection(host ='xx.xx.xx.xx',username='user',private_key=keyfile)现在我得到了错误
pysftp.exceptions.HostKeysException:未找到主机密钥
一定是遗漏了什么。这是在Windows 10上,所以没有.ssh/known_hosts文件。
我需要检索主机密钥吗?
或者按照别处的建议切换回pysftp 0.2.8?
发布于 2020-07-02 02:11:34
终于让它起作用了。
在win10上安装了ubuntu。
使用ssh -i "key.pem“uname@aws登录到aws
它保存了known_hosts文件。
我不得不使用ssh-keygen和key-scan from
https://unix.stackexchange.com/questions/6533
以更正该文件。
最后,将用户从/ known_hosts /.ssh复制到c:/user/myname/.ssh,然后
不是来自/home/.ssh/
所以代码现在是
awshost="www.xxxxxxx.com"
keyfile=r'C:\files\docs\1-AWS\LightsailDefaultKey-us-west-2.pem'
known=r'C:\Users\myname\.ssh\known_hosts'
cn = sftp.CnOpts(knownhosts=known)
srv = sftp.Connection(host=awshost,
username='bitnami',
private_key=keyfile,
cnopts=cn)并且它没有错误地连接
发布于 2020-06-12 03:06:51
您的问题与服务器主机密钥有关。有关这一点,请参阅Verify host key with pysftp。
您的问题与您的私钥无关,您应该使用私钥进行身份验证。私钥转到Connection constructor的private_key参数。
请参阅Connect to SFTP with key file using Python pysftp
另请参阅我关于keys involved in SSH的文章。
发布于 2020-06-23 18:01:32
我也有同样的问题。以下是我采取的解决问题的步骤:
ssh
chmod 400 keyfile.pem
ssh -i "keyfile.pem" USERNAME@IP_OF_INSTANCE现在可以继续运行python脚本了。
Explanation:
pysftp在'known_hosts‘中搜索ssh密钥条目。当您第一次通过SSH连接到实例时,OpenSSH会自动在'known_hosts‘中为它创建一个条目,pysftp现在可以找到该条目。
执行上述步骤2的原因是,AWS需要对密钥文件具有更严格的权限。
Windows用户的说明:
如果您尝试使用PuTTy执行此操作,pysftp将无法定位SSH条目,因为PuTTy将它们存储在Windows 注册表中。相反,您可以在Windows上安装和使用OpenSSH,然后在bash终端(如Git BASH)中,您可以按照上面的3个步骤进行操作。
https://stackoverflow.com/questions/62328536
复制相似问题