pysftp 忽略禁用的主机密钥检查
Posted
技术标签:
【中文标题】pysftp 忽略禁用的主机密钥检查【英文标题】:pysftp ignoring disabled hostkey checking 【发布时间】:2019-09-22 08:49:00 【问题描述】:当尝试使用 pysftp 从/向 SFTP 服务器检索/发送文件(通过专用连接)时,我正在尝试禁用主机密钥检查,但我仍然收到 pysftp 无法加载known_hosts 文件中的主机密钥。尽管出现警告,文件传输过程仍按预期完成。
我知道跳过密钥检查不是最佳做法,但主机不会发布密钥,并且它的通信发生在传输预加密文件的专用网络上,因此在这种特殊情况下风险相对较低。
也就是说,我试图将一个空的 known_hosts 文件放在正确的目录中,结果却出现了更严重的错误。
以下示例代码对我来说很好用...除了下面的警告。
import sys
import pysftp
hostname = "123.123.123.123"
username = "abc"
password = "xyz"
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
with pysftp.Connection(hostname, username=username, password=password, cnopts=cnopts) as sftp:
sftp.get('/test.get', preserve_mtime=True)
sftp.put('test.put', preserve_mtime=True)
执行该脚本时会生成以下警告:
UserWarning: Failed to load HostKeys from C:\Users\eah036\.ssh\known_hosts.
You will need to explicitly load HostKeys (cnopts.hostkeys.load(filename))
or disableHostKey checking (cnopts.hostkeys = None).
warnings.warn(wmsg, UserWarning)
我可以忍受正在生成的警告消息,但我肯定更喜欢在代码执行时有一个干净的终端输出。关于为什么 cnopts.hostkeys
参数似乎被“忽略”的任何想法?
【问题讨论】:
【参考方案1】:无法抑制警告,从 pysftp 0.2.9 开始。
您所能做的就是创建一个至少包含一个条目的known_hosts
文件(它不必是正确的条目,只要是具有有效语法的任何条目即可)。如果您在 CnOpts
构造函数中明确提供文件路径,则可以在标准位置或其他任何位置创建文件。
不过,即使您无法从可靠来源获取密钥(“但主机不发布密钥”),使用您在开发代码仍然比根本不验证密钥要好。
查看我对Verify host key with pysftp的回复。
【讨论】:
以上是关于pysftp 忽略禁用的主机密钥检查的主要内容,如果未能解决你的问题,请参考以下文章
使用私钥通过 pysftp 连接到 SFTP 服务器时“找不到主机 ***** 的主机密钥”