遠端使用者首次嘗試使用 Mac OS X 下的「傳輸」用戶端連接到我的 SFTP/SSH 伺服器,並發現主機金鑰指紋與預期值不符。
ssh-keygen -lf /etc/ssh/ssh_host_dsa_key
我有顯示指紋的螢幕截圖,並將其與和的輸出進行了比較ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
,但它與其中任何一個都不匹配。
cut -d ' ' -f 2 < /etc/ssh/ssh_host_dsa_key.pub | base64 -d | sha1sum
我也未能成功地將指紋與和的輸出進行比較cut -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 指紋)。
伺服器運行 Debian 6 LTS 和標準 OpenSSH 伺服器。
什麼可能導致指紋不符?我該如何調試這個問題?
答案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
答案2
原來使用的FTP程式不是Transmit而是Cyberduck 4.5.1。錯誤指紋的問題已經被稱為主機密鑰指紋錯誤。更新到最新版本修復了這個問題,顯示的指紋現在是正確的。