檢查遠端主機發送的 ECDSA 密鑰的指紋
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
進入它時,一個新的新條目因為它將被添加到這樣的文件中。