Ssh

檢查遠端主機發送的 ECDSA 密鑰的指紋

  • June 7, 2020

ssh嘗試進入伺服器時,我收到了眾所周知的警告消息:

$ ssh whateverhost
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/user/.ssh/known_hosts:10
ECDSA host key for ipofmyhost has changed and you have requested strict checking.
Host key verification failed.

我知道為什麼,因為我更改了此類伺服器的 ip。但如果不是這樣,我如何檢查遠端主機發送的 ECDSA 密鑰的指紋?

我試圖這樣做:

echo -n ipofthehost | sha256sum

但我沒有得到相同的指紋。我也在AWS中嘗試過類似“hostname,ip” ,但沒有得到任何匹配。

如果我從 known_hosts 文件中刪除入口並ssh再次嘗試,它會成功並告訴以下內容:

ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Are you sure you want to continue connecting (yes/no)?

那麼應用 sha256sum 來獲取指紋是什麼以及如何檢查它呢?

公鑰指紋不是 IP 地址字元串的簡單散列。

要檢索遠端主機公鑰,您可以使用ssh-keyscan <IP address>,然後您可以使用常用工具提取其指紋 ( ssh-keygen -lf <public_key_file>)。

最後,您可以將known_hosts文件中的目前指紋與ssh-keygen -l -F <domain_or_IP_address>.

更詳細一點:因為警告消息是指遠端主機發送的ECDSA密鑰的指紋,所以我們收集有關主機的公共 (ECDSA) 密鑰的資訊:

ssh-keyscan -t ecdsa <IP_address_or_hostname> ECDSA_file_to_compare

然後我們可以在known_hosts文件中找出公鑰(ECDSA)密鑰在哪裡:

ssh-keygen -l -F ipofhost

如果我們想比較指紋,我們必須放入known_hosts文件的內容(只是與此主機相關的條目)。我們可以將其命名為 ecdsa_file_from_known_hosts,然後將它們進行如下比較:

ssh-keygen -lf ecdsa_file_to_compare
ssh-keygen -lf ecdsa_file_from_known_hosts

並檢查它們是否顯示相同的雜湊值。

當然它們不匹配,這就是我收到警告消息的原因(在ssh內部檢查此匹配)。如果我們確定 IP 地址更改(因此我們不會遭受中間人攻擊),我們可以在known_hosts文件中刪除該主機的條目,下次我們ssh進入它時,一個新的新條目因為它將被添加到這樣的文件中。

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