簡體   English   中英

使用私鑰通過 pysftp 連接到 SFTP 服務器時,“找不到主機 ***** 的主機密鑰”

[英]"No hostkey for host ***** found" when connecting to SFTP server with pysftp using private key

所以我在通過 SFTP 連接到遠程服務器時遇到了很多問題。 我試過像下面這樣的正常方法。

sftp = pysftp.Connection(host='Host',username='username',password='passwd',private_key=".ppk")

哪個不起作用。 我收到以下錯誤:

SSHException:找不到主機 ***** 的主機密鑰。

然后我嘗試了以下操作:

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
s = pysftp.Connection(host='host', username='user', password='password', cnopts=cnopts)

這也沒有用。 我收到以下錯誤:

BadAuthenticationType: ('Bad authentication type', ['publickey']) (allowed_types=['publickey'])

此外,當我運行以下命令時:

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("host",username = "username",password = "password")
ssh_session = client.get_transport().open_session()

我犯了同樣的錯誤:

BadAuthenticationType: ('Bad authentication type', ['publickey']) (allowed_types=['publickey'])

您混淆了用於身份驗證的私鑰和用於驗證服務器身份的主機密鑰。 兩者都需要處理,而您所有的代碼嘗試都只處理其中一個。 請參閱關於SSH 密鑰對的文章以了解 SSH 中涉及的兩種密鑰之間的區別。

所以這應該“有效”:

# Accept any host key (still wrong see below)
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
# And authenticate with a private key
sftp = pysftp.Connection(
    host='Host', username='user', password='passwd', private_key=".ppk",
    cnopts=cnopts)

但是這段代碼實際上會盲目地接受任何主機密鑰( cnopts.hostkeys = None ),這是一個安全漏洞。 有關正確方法,請參閱使用 pysftp 驗證主機密鑰

您正在連接的host似乎不可用。 這通常發生在主機名由於防火牆規則(或主機上的拼寫錯誤)而無法訪問時。 我建議首先檢查您是否可以從 (unix) 終端進行 sftp

> sftp username@host

如果系統提示您輸入密碼或已登錄,則您可以從該機器連接到該主機

如果不嘗試使用端口 22 上的netcat檢查該主機是否可用,如果主機不可用,您將遇到超時或管道損壞

>nc -v host 22

我建議僅在此之后調試pysftpparamiko包。

此外,如果您使用私鑰進行身份驗證,則不需要使用密碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM