我有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?
你的问题是关于服务器主机密钥的。关于这个问题,请看 用pysftp验证主机密钥.
你的问题与你的私钥无关,你应该使用私钥进行认证。私钥的地址是 private_key
的论点 Connection
构造者. 见 使用Python pysftp通过密钥文件连接到SFTP。
另见 我的 文章 密钥.
我也有同样的问题。下面是我解决的步骤。
.pem
文件。chmod 400 keyfile.pem
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个步骤进行操作。
最后得到了它的工作,因为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()