Linux

什麼可能導致 SFTP 主機密鑰指紋不匹配?

  • October 18, 2015

遠端使用者第一次嘗試連接到我的 SFTP/SSH 伺服器,使用 Mac OS X 下的“傳輸”客戶端,發現主機密鑰指紋與預期值不匹配。

我有顯示指紋的螢幕截圖,並將其與ssh-keygen -lf /etc/ssh/ssh_host_dsa_keyand的輸出進行了比較,但它ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub與其中任何一個都不匹配。

我也沒有成功地將指紋與 and 的輸出進行比較cut -d ' ' -f 2 < /etc/ssh/ssh_host_dsa_key.pub | base64 -d | sha1sumcut -d ' ' -f 2 < /etc/ssh/ssh_host_rsa_key.pub | base64 -d | sha1sum因為似乎使用了不同的指紋算法?)。

客戶端的消息框標題為(翻譯成英文)

*<主機名>*的未知主機密鑰

和狀態

伺服器未知。主機密鑰的指紋是*<16 個八位字節>*。( 允許否認 )

$$ $$總是

所以沒有跡象表明是否使用 RSA 或 DSA 密鑰,或者是否使用 MD5 或某些 SHA 算法來創建指紋。

顯示給遠端使用者的指紋有 16 個以冒號分隔的八位字節,因此它似乎沒有使用 SHA-224 或更高版本。更新:我剛剛注意到即使是 SHA-1 雜湊也會有 20 個八位字節,所以顯示的指紋顯然不是任何 SHA 格式。

連接最終會轉到正確的伺服器,因為如果使用者允許連接,我可以在伺服器日誌中看到登錄嘗試。因此,似乎在客戶端正確輸入了主機名/IP。

與另一個(完全不相關的)SFTP 伺服器的連接也顯示不正確的指紋(但與第一個伺服器的指紋不同)。

如果我嘗試從其他主機(或從伺服器本身本地)使用 OpenSSH 自己連接到伺服器,則會顯示正確的指紋(RSA 主機密鑰的 MD5 指紋)。

該伺服器使用標準 OpenSSH 伺服器執行 Debian 6 LTS。

什麼可能導致這種指紋不匹配?我該如何調試這個問題?

原來使用的 FTP 程序不是 Transmit,而是 Cyber​​duck 4.5.1。錯誤指紋的問題已被稱為錯誤的主機密鑰指紋。更新到最新版本解決了這個問題,現在顯示的指紋是正確的。

如果這是他們第一次連接,那麼是否存在不匹配並不重要……客戶端只是有一些不相關的舊條目恰好具有與其關聯的相同主機名或 IP 地址。只需清除它:

ssh-keygen -R $name_or_ip

做完之後,下次連接的時候肯定會說是RSA,ECDSA等。如果沒有,請嘗試使用適當的客戶端,例如 Linux 上的標準 OpenBSD OpenSSH 客戶端,或嘗試 -v(或 -vvvv 等詳細選項)。然後驗證並接受新密鑰。舊客戶端的關鍵指紋格式是 md5(新客戶端是 sha256,一些奇怪的 base64 格式而不是 ascii-hex),而在伺服器端獲取指紋的正確方法是:

ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key

引用自:https://serverfault.com/questions/728215