pysftp忽略禁用的主机密钥检查

时间:2019-05-03 19:26:59

标签: python ssh ssh-keys pysftp

当尝试使用pysftp(通过专用连接)从SFTP服务器检索文件/向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 个答案:

答案 0 :(得分:0)

从pysftp 0.2.9开始,该警告无法被抑制。

您所能做的就是创建一个至少包含一个条目的known_hosts文件(它不一定是正确的条目,只要是具有有效语法的任何条目)。如果您在CnOpts构造函数中明确提供文件路径,则可以在标准位置或其他任何位置创建文件。


尽管如此,即使您不能从可靠来源获得密钥(“但主机未发布密钥” ),也要使用从服务器获取的公共密钥。开发代码还是比根本不验证密钥要好得多。

请参阅我对Verify host key with pysftp的回答。