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

问题描述 投票:1回答:1

我有aws的ssh密钥为awskey.pem.I am trying to sftp to the host with pysftp。

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: HostKeysException: Host keys not found" 在搜索其他网站时,没有关于密钥文件格式的讨论。不知道它是否应该是一个.pemformat,或者我必须把它转换为其他格式。在花了2天时间后,我已经没有进展了。

keyfile='c:\\awskey.pem'     
srv=sftp.connection(host ='xx.xx.xx.xx',username='user',private_key=keyfile)

现在我得到错误pysftp.exceptions.HostKeysException.No Host Keys Found Must be missing something: No Host Keys Found Must be missing something somewhere.This is on Windows 10 so no .sshknown_hosts file. 我是否需要检索主机密钥? 或者像其他地方建议的那样切换回pysftp 0.2.8?

python format pem pysftp
1个回答
0
投票

你的问题是关于服务器主机密钥的。关于这个问题,请看 用pysftp验证主机密钥.

你的问题与你的私钥无关,你应该使用私钥进行认证。私钥的地址是 private_key 的论点 Connection 构造者. 见 使用Python pysftp通过密钥文件连接到SFTP。


另见 我的 文章 密钥.


0
投票

我也有同样的问题。下面是我解决的步骤。

  1. 打开一个终端机,并导航到文件夹中的 .pem 文件。
  2. 运行 chmod 400 keyfile.pem
  3. 使用OpenSSH对你的实例进行ssh。ssh -i "keyfile.pem" USERNAME@IP_OF_INSTANCE

现在你可以回去运行你的python脚本了。

解释:

pysftp在 "known_hosts "中搜索ssh密钥条目。第一次SSH进入实例时,OpenSSH会自动在'known_hosts'中创建一个条目,pysftp现在可以找到它。

上面第2步的原因是AWS对key文件的权限要求比较严格。

Windows用户注意。

如果你尝试使用PuTTy来做这个,pysftp将无法定位SSH条目,因为PuTTy将它们存储在Windows的 "已知主机 "中。登记处. 相反,你可以在Windows上安装并使用OpenSSH,然后在bash终端(如Git BASH)中按照上面的3个步骤进行操作。


-1
投票

最后得到了它的工作,因为Filezilla的工作只有key file,user,hostip,然后设置hostkeys为Noneworks后,设置CnOpts调用hostip就可以了。

import pysftp as sftp

hostip  = "xx.xx.xx.xx"
keyfile ='c:\\awskey.pem'
userb   = "bitnami"

Cnopts=sftp.CnOpts(hostip)
Cnopts.hostkeys = None

srv=sftp.connection(host = hostip,
                    username=userb,
                    cnopts=Cnopts)


lpath='c:\\test.txt'
rpath='apps/wordpress/htdocs/mytheme/test.txt'
srv.put(lpath,rpath)
srv.close()
© www.soinside.com 2019 - 2024. All rights reserved.