当前位置: 首页 > 知识库问答 >
问题:

使用pysftp验证主机密钥

栾钟展
2023-03-14

使用PuTTY,终端程序将其保存到注册表[hkey_current_user\software\simontatham\PuTTY\sshhostkeys]

如何协调pysftp和Putty之间的差异?

我的代码是:

import pysftp as sftp

def push_file_to_server():
    s = sftp.Connection(host='138.99.99.129', username='root', password='*********')
    local_path = "testme.txt"
    remote_path = "/home/testme.txt"

    s.put(local_path, remote_path)
    s.close()

push_file_to_server()

共有1个答案

訾晋
2023-03-14

不要设置cnopts.hostkeys=none(如第二个得到支持的答案所示),除非您不关心安全性。这样做就会失去对中间人攻击的保护。

使用cnopts.hostkeys(返回hostkeys)管理受信任的主机密钥。

cnopts = pysftp.CnOpts(knownhosts='known_hosts')

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

其中known_hosts包含服务器公钥],其格式如下:

example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQAB...

如果不想使用外部文件,还可以使用

from base64 import decodebytes
# ...

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

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

尽管从pysftp 0.2.9开始,这种方法将发出一个警告,看起来像是一个bug:
在使用pysftp连接到SFTP服务器时“未能加载主机键”警告

使用OpenSSHssh-keyscan检索所需格式的主机密钥的一个简单方法是:

$ ssh-keyscan example.com
# example.com SSH-2.0-OpenSSH_5.3
example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQAB...

(由于pysftp中的一个bug,如果服务器使用非标准端口,这就不起作用了-条目以[example.com]:port+小心将ssh-keyscan重定向到PowerShell中的文件)

您还可以使应用程序自动执行相同的操作:
使用带有PysFTP的Paramiko AutoAddPolicy
(它会自动将新主机的主机密钥添加到known_hosts中,但对于已知的主机密钥,它不会接受更改的密钥)

虽然为了绝对安全,您不应该远程检索主机密钥,因为您无法确定,如果您没有受到攻击。

请参阅我的文章“我在哪里获取SSH主机密钥指纹以授权服务器?”
这是为我的WinSCP SFTP客户端提供的,但其中的大多数信息一般都是有效的。

如果只需要使用其指纹验证主机密钥,请参阅python-pysftp/paramiko-verify host key using its frington。

 类似资料:
  • 问题内容: 我正在使用pysftp编写程序,它想针对验证SSH主机密钥。 终端程序使用PuTTY将其保存到Registry中。 如何调和pysftp和PuTTY之间的区别? 我的代码是: E:\Program Files (x86)\Anaconda3\lib\site-packages\pysftp__init__.py:61: UserWarning: Failed to load HostK

  • 此代码引发异常。如何验证SSH指纹而不将其存储在文件中?我相信下面的代码是为公钥设计的。但带有SFTP服务器的客户端验证了指纹,但没有为我获取公钥。 代码基于使用PysFTP验证主机密钥。

  • 问题内容: 我的 詹金斯(Jenkins) 有问题,设置为“ git”,显示以下错误: 我已经用 ssh 测试过: 这是错误的: 我还使用“ SSH密钥”完成了这些步骤。 在詹金斯下登录 将您的github密钥复制到Jenkins .ssh文件夹 重命名键 但仍然无法在 jenkins中使用* git 仓库。 * 感谢帮助!。 问题答案: 更改为用户并手动运行命令: 首次通过SSH连接到新主机时,

  • 我对jenkins有一个问题,设置“Git”,显示以下错误: 我已经用ssh进行了测试: 这是错误: 谢谢你的帮助!。

  • 我正在尝试提交到我的存储库,但当我单击“发布分支”时,出现了一个错误,请帮助我,伙计们,我需要办公室工作的帮助,我是新来的。 点击这里查看图片

  • 问题内容: 我具有对生产服务器的超级用户访问权限,我想在git中将最新版本部署到服务器,但是当我在要更新的文件夹上“ git pull”时遇到以下错误。 我浏览了一下,但是找不到明确的答案。 登台服务器在同一台计算机上运行,​​但是只是在不同的文件夹中,当我在该文件夹中时,一切正常。 我对Linux不太有经验,所以请提供有关如何修复的明确答案:-) 否则我可以使用任何我需要的东西 ps这在过去一直