pysftp 忽略禁用的主机密钥检查
pysftp ignoring disabled hostkey checking
当尝试使用 pysftp retrieve/send 文件 from/to 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
参数似乎是 "ignored" 的任何想法?
从 pysftp 0.2.9 开始无法抑制警告。
您所能做的就是创建一个至少包含一个条目的 known_hosts
文件(它不必是正确的条目,只要是具有有效语法的任何条目)。如果您在 CnOpts
构造函数中明确提供文件路径,则可以在标准位置或其他任何位置创建文件。
不过,即使您无法从可靠来源获取密钥(“但主机不发布密钥”),使用 public 密钥在开发代码时从服务器获取的密钥仍然比根本不验证密钥要好得多。
查看我对 Verify host key with pysftp 的回答。
当尝试使用 pysftp retrieve/send 文件 from/to 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
参数似乎是 "ignored" 的任何想法?
从 pysftp 0.2.9 开始无法抑制警告。
您所能做的就是创建一个至少包含一个条目的 known_hosts
文件(它不必是正确的条目,只要是具有有效语法的任何条目)。如果您在 CnOpts
构造函数中明确提供文件路径,则可以在标准位置或其他任何位置创建文件。
不过,即使您无法从可靠来源获取密钥(“但主机不发布密钥”),使用 public 密钥在开发代码时从服务器获取的密钥仍然比根本不验证密钥要好得多。
查看我对 Verify host key with pysftp 的回答。