首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sftp to aws lightsail python使用pysftp密钥错误

sftp to aws lightsail python使用pysftp密钥错误
EN

Stack Overflow用户
提问于 2020-06-12 00:02:45
回答 4查看 334关注 0票数 2

我有aws ssh密钥作为awskey.pem。我正在尝试使用pysftp向主机发送sftp。

代码语言:javascript
复制
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格式,或者我必须将其转换为其他格式。

在这上面花了两天的时间之后,我已经不再领先了。

代码语言:javascript
复制
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?

EN

回答 4

Stack Overflow用户

发布于 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/

所以代码现在是

代码语言:javascript
复制
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)

并且它没有错误地连接

票数 1
EN

Stack Overflow用户

发布于 2020-06-12 03:06:51

您的问题与服务器主机密钥有关。有关这一点,请参阅Verify host key with pysftp

您的问题与您的私钥无关,您应该使用私钥进行身份验证。私钥转到Connection constructorprivate_key参数。

请参阅Connect to SFTP with key file using Python pysftp

另请参阅我关于keys involved in SSH的文章。

票数 0
EN

Stack Overflow用户

发布于 2020-06-23 18:01:32

我也有同样的问题。以下是我采取的解决问题的步骤:

ssh

  • 打开终端并导航到包含ssh文件的文件夹。

  • 运行chmod 400 keyfile.pem

  • Use OpenSSH进入您的实例: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个步骤进行操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62328536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档