Git

ECDSA 密鑰指紋 - 看起來是 base64 編碼的,但字元太少

  • June 3, 2019

我已經設置了一個GitLab VM,並在其上創建了一個項目。現在我正在嘗試使用我的 git 客戶端從另一台機器連接到它(Git for Windows v2.7.1 …也嘗試升級到最新版本,即 2.15.1,但沒有變化)。

在 Windows 機器上,我嘗試:

git push -u origin --all
The authenticity of host 'localgit.local (10.1.2.3)' can't be established.
ECDSA key fingerprint is SHA256:twmcV7LjBtI9vUsDeFEHeH0lUcBAihWtGye0K9vHCrk.
Are you sure you want to continue connecting (yes/no)? no

我選擇了“否”,因為當我在虛擬機上仔細檢查時,我發現了一個不同的指紋:

ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 7e:e4:4e:7f:47:b0:41:75:2c:45:bd:be:f5:44:77:d7 /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)

好的,它是十六進制格式,所以我將其轉換為base64,對嗎?

hex: 7ee44e7f47b041752c45bdbef54477d7
base64: fuROf0ewQXUsRb2+9UR31w==

嗯,這不匹配……如果我走另一條路並將那個base64指紋轉換為十六進制並看看它是什麼樣子?結果我不能,它是 43 個字元,並且 base64 字元串的長度必須是 4 的倍數。

關於我在這裡缺少什麼的任何想法?

由冒號分隔的八位字節格式是 MD5 指紋,而不是 SHA256 指紋。您不能直接將一個轉換為另一個(好吧,如果您反轉 MD5 指紋,您可能還可以,但這仍然需要一些 CPU 能力)。

ssh-keygen輸出 MD5 指紋表明該機器可能執行的是相當舊的 OpenSSH 版本,因為這些天的預設輸出格式是 SHA256 。您可以嘗試傳遞-E sha256tossh-keygen以使其輸出 SHA256 雜湊,以防有一個支持 SHA256 但預設為 MD5 的版本,並且您碰巧正在執行它,但我不想說它肯定會工作。

如果您的版本ssh-keygen無法輸出 SHA256,另一種選擇是“降級”SSH 客戶端以在連接時輸出 MD5 指紋。為此,您需要-o FingerprintHash=md5在命令行(或FingerprintHash md5SSH 配置)中進行設置。鑑於您通過 git 執行 SSH,究竟如何最好地做到這一點,留給精明的讀者作為練習。<咧嘴笑>

側邊欄:base64 SHA256 雜湊不是“正確”字元數的原因是因為 SHA256 雜湊不是適合沒有尾隨=符號的 base64 字元串的“正確”字元數。由於最後幾個字元將“始終”是=標誌,因此它們會被丟棄,從而節省了幾個無用的字元。

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