首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用注册表中的主机键连接到使用pySFTP的EFT服务器

无法使用注册表中的主机键连接到使用pySFTP的EFT服务器
EN

Stack Overflow用户
提问于 2020-07-07 23:12:28
回答 1查看 151关注 0票数 0

我对这个代码完全不知所措。我正在尝试设置一个脚本,定期将文件从EFT服务器传输到本地文件夹。我使用pySFTP,从外观上看,文件传输代码非常简单。

但是,由于主机密钥的问题,我无法连接到EFT服务器。我不熟悉主键是如何工作的,尽管我读了很多关于它的书,但我仍然不确定我是否理解它。我已经尝试了第一个代码,来自Martin Prikryl。我已经用占位符替换了实际的登录详细信息,因为这是一个工作服务器,所以不能在这里分享,但是我100%确定我使用的是正确的:

代码语言:javascript
复制
import pysftp
import paramiko
from base64 import decodebytes

keydata = b"""0x11,0xc83f438e85c279c64150c44db874ab091267f38a69843dbdfb0d5b729109b4db64c706af00a68f243740149afa1c3022ebb5435904256229f5820050678361a2880bdb8934d4876c8383d4bd457b74397178880c9ae669645d778510e3ff1dcc1ac91ab43701fda075afaab49a0c3526bd98e848895221791c68b4aa98fe196f2e7ba998a713d48608f38c2699dc8b8d1bd70bedee143a7aad1fd6b2409c77588bc0d9dd2fecae9cf272a0242f2080f5054e78a100a94fda577bdab18ba75676aa999d2dd31c3df56c62cbd6e45aa5bffcb44de2ef129dfe97f6bf6d6d51032fe138950409168c003d3d316588b40ba97b5cc8122d0a323bd809bc3c53074bdb"""
key = paramiko.RSAKey(data=decodebytes(keydata))
cnopts = pysftp.CnOpts()
cnopts.hostkeys.add('HOST', 'rsa2022', key)

host = "HOST"
username = "USER"
password = "PASS"

with pysftp.Connection(host, username, password, cnopts=cnopts) as sftp:
    print("Connection established...")

由于填充问题,此操作失败。我通过使用Putty连接到服务器来获得这个注册表项,服务器将这个注册表项保存到我的注册表中。我还尝试使用服务器所有者提供的密钥:

代码语言:javascript
复制
import pysftp
import paramiko
from base64 import decodebytes

keydata = b"""e1:98:d0:0e:85:f8:51:23:87:fa:24:4b:7e:81:88:e8"""
key = paramiko.RSAKey(data=decodebytes(keydata))
cnopts = pysftp.CnOpts()
cnopts.hostkeys.add('HOST', 'ssh-rsa', key)

host = "HOST"
username = "USER"
password = "PASS"

with pysftp.Connection(host, username, password, cnopts=cnopts) as sftp:
    print("Connection established...")

这给了我一个错误- UnicodeDecodeError:'utf-8‘编解码器无法解码位置2-3的字节:无效的连续字节-我不确定这一点。我试着去掉冒号,但我得到了同样的错误。

我已经尝试了5或6种不同的解决方案,我最大的问题是,Putty在我的注册表中存储了主机密钥,而pySFTP或Paramiko (据我所知)无法在那里访问它。

我考虑过自己创建一个供pySFTP参考的known_hosts文件,但找不到任何明确的方法。

诚然,这是比我习惯的更高级的Python,但是它想要的主键完全让我困惑。如果有人可以提出一个解决方案或替代方案来尝试,我对所有的建议都持开放态度。

EN

回答 1

Stack Overflow用户

发布于 2020-07-17 00:36:21

非常感谢你的帮助马丁·普里克瑞尔。我使用ssh-keyscan (尽管我有权限,但它允许我在cmd提示符中使用它)并获得了真正的主机密钥。然后在您的代码中使用pySFTP验证主机密钥!

因此,为了回答我自己的问题,以下是我的工作代码,其中HOSTKEY是在命令提示符中通过ssh-keyscan收集的密钥:

代码语言:javascript
复制
import pysftp
import paramiko
from base64 import decodebytes

keydata = b"""HOSTKEY"""
key = paramiko.RSAKey(data=decodebytes(keydata))
cnopts = pysftp.CnOpts()
cnopts.hostkeys.add('HOST', 'ssh-rsa', key)

myHost = "HOST"
myUsername = "USER"
myPassword = "PASSWORD"

with pysftp.Connection(host=myHost, username=myUsername, password=myPassword, cnopts=cnopts) as sftp:
    print("Connection established...")

我仍然不知道如何创建或填充known_hosts文件,但在命令提示符下尝试'> known_hosts‘命令会导致访问被拒绝,因此我完全有可能无法访问存储该文件的位置。这段代码将在只有我有权限访问的安全机器上运行,所以这不是一个大问题。

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

https://stackoverflow.com/questions/62778390

复制
相关文章

相似问题

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