pysftp设置hostkeys=None仍报failed to load hostkey警告如何解决
警告仍弹出的原因
该警告是在pysftp.CnOpts()类初始化阶段触发的,早于你后续执行cnopts.hostkeys = None的赋值操作:CnOpts默认会先尝试读取系统默认路径下的known_hosts文件,读取失败就会立即抛出警告,你设置的hostkeys = None只是关闭后续连接的主机密钥校验,没法阻止初始化阶段的警告输出。
另外你已经配置的UserWarning过滤器未生效,大概率是pysftp内部抛出警告时指定了特殊的stacklevel,或者是模块导入阶段的警告触发时机早于过滤器生效时机导致的。
彻底消除警告的解决方法
方法1:初始化CnOpts时直接指定不加载主机密钥(最稳妥)
直接在实例化CnOpts时传入knownhosts=None参数,从根源上跳过默认known_hosts文件的加载逻辑,不会触发警告:
# 替换原来的cnopts初始化代码即可,不需要额外赋值cnopts.hostkeys = None cnopts = pysftp.CnOpts(knownhosts=None)
这个方法不需要修改警告过滤器,也不会误屏蔽其他正常的UserWarning。
方法2:精准过滤pysftp的主机密钥警告
如果不想修改CnOpts初始化逻辑,可以调整警告过滤器的配置,精准匹配该警告内容:
import warnings # 精准匹配pysftp的主机密钥加载失败警告,不会影响其他UserWarning warnings.filterwarnings('ignore', message='Failed to load HostKeys')
两种方法任选其一即可解决警告弹出问题。
注意:你当前关闭主机密钥校验的方案仅适合临时测试使用,正式上线前请务必配置合法的主机密钥校验,避免中间人攻击风险。
内容的提问来源于stack exchange,提问作者snowcoder
相关产品推荐
相关产品推荐

