我写了一个 Python 脚本来使用密钥身份验证连接到 SFTP 服务器。它成功连接到服务器但显示以下警告(见下文)。这是什么意思以及如何删除它。必须对代码进行哪些更改?
我的代码:
import os
import pysftp
import socket
import paramiko
import time
import os.path
import shutil
IP = "127.0.X.X"
myUsername = "USERNAME"
port = 22
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
import os
privatekeyfile = os.path.expanduser("C:\\Users\\Rohan\\.ssh\\cool.prv")
mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)
try:
with pysftp.Connection(host=IP, username=myUsername,private_key=mykey,cnopts=cnopts) as sftp:
try:
r=str(socket.gethostbyaddr(IP))
print("connection successful with "+r)
except socket.herror:
print("Unknown host")
except:
print("connection failed")
警告:
UserWarning: Failed to load HostKeys from C:\Users\Rohan\.ssh\known_hosts. You will need to explicitly load HostKeys (cnopts.hostkeys.load(filename)) or disableHostKey checking (cnopts.hostkeys = None).
warnings.warn(wmsg, UserWarning)
原文由 udit kanotra 发布,翻译遵循 CC BY-SA 4.0 许可协议
我相信这是 pysftp 中的错误。每次使用
cnopts.hostkeys = None
时都会得到这个(尽管警告实际上建议使用它)。无论如何,你不应该使用
cnopts.hostkeys = None
,这样做会失去安全性。有关正确的解决方案,请参阅 使用 pysftp 验证主机密钥。
根据您对密钥身份验证的引用,我假设您将您的帐户密钥误认为是主机密钥。阅读我关于 SSH 密钥对 的文章以了解其中的区别。