错误:pysftp 中的“无法加载主机密钥”[重复]

Posted

技术标签:

【中文标题】错误:pysftp 中的“无法加载主机密钥”[重复]【英文标题】:Error: 'failed to load hostkey' in pysftp [duplicate] 【发布时间】:2021-12-19 03:55:17 【问题描述】:

我正在尝试使用 python pysftp 库从 SFTP 服务器和本地服务器(窗口)复制文件。 我正在使用 usrname 和密码验证 sftp 服务器,并且没有 SSH-Host 密钥。

我的代码正在运行并将文件复制到本地目录,但仍然收到有关 HostKeys 的警告消息。

import pysftp
import sys
import csv
import json, os
from pysftp import known_hosts
import warnings
warnings.simplefilter(action='ignore',category=UserWarning)

myHostname = "exmaple.com"
myUsername = "user"
myPassword = "foo"

data = []
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

try:
    with pysftp.Connection(host=myHostname, username=myUsername, password=myPassword, port=22, cnopts=cnopts ) as sftp:        
        print ("Connection succesfully stablished ... ")
        #cnopts=cnopts

        # Define the file that you want to download from the remote directory
        remoteFilePath = '/rcv'

        os.chdir("gpgencrypted")

        file = sftp.get_d(remoteFilePath,'',preserve_mtime=True)
        print("File copied to mid-server successfully")
except ValueError:
    print("File Transfer was unsuccessful")

这是输出中的警告错误。我在代码中设置无主机键,但仍然出现警告消息

Warning (from warnings module):
  File "C:\Program Files\Python39\lib\site-packages\pysftp\__init__.py", line 61
    warnings.warn(wmsg, UserWarning)
UserWarning: Failed to load HostKeys from C:\Users\kiran.patil\.ssh\known_hosts.  You will need to explicitly load HostKeys (cnopts.hostkeys.load(filename)) or disableHostKey checking (cnopts.hostkeys = None).
Connection succesfully stablished ... 
None

编辑 1: 添加了警告过滤器以跳过 UserWarning。理想情况下应该使用主机密钥,但现在我没有 sftp 主机密钥,但在我们投入生产之前我肯定会使用主机密钥。

【问题讨论】:

看起来只是一个警告 如何抑制警告? 尝试配置警告docs.python.org/3/library/warnings.html 【参考方案1】:

添加了警告过滤器以跳过用户警告。理想情况下应该使用主机密钥,但现在我没有 sftp 主机密钥,但在我们投入生产之前我肯定会使用主机密钥

import pysftp
import sys
import csv
import json, os
from pysftp import known_hosts
import warnings
warnings.simplefilter(action='ignore',category=UserWarning)

myHostname = "example.coom"
myUsername = "useer"
myPassword = "foo"

data = []
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

try:
    with pysftp.Connection(host=myHostname, username=myUsername, password=myPassword, port=22, cnopts=cnopts ) as sftp:        
        print ("Connection succesfully stablished ... ")
        #cnopts=cnopts

        # Define the file that you want to download from the remote directory
        remoteFilePath = '/rcv'

        os.chdir("gpgencrypted")

        file = sftp.get_d(remoteFilePath,'',preserve_mtime=True)
        print("File copied to mid-server successfully")
except ValueError:
    print("File Transfer was unsuccessful")

【讨论】:

“我没有 sftp 主机密钥” – 你是什么意思?你当然知道。 我使用腻子找到了密钥,但不知道如何在代码中使用文件。我在窗口服务器上运行脚本。许多其他文档都包含在基于 linux 的系统中。 我对重复问题的回答中有一个链接:Verify host key with pysftp。

以上是关于错误:pysftp 中的“无法加载主机密钥”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

sshd@QNX:无法加载主机密钥/缺少权限分离

pysftp 身份验证超时

使用 pysftp 执行 sftp 但出现主机密钥错误

从 aws-lambda 导入 pysftp 时如何修复导入错误“没有名为 '_cffi_backend' 的模块”

Pysftp "cd" 对 AIX 服务器失败,并出现 "OverflowError: mode out of range" 错误

PySFTP失败,“在部署Django / Heroku时出现”找不到主机X的主机密钥”