偶爾會碰到這種錯誤,但是每次都會忘記怎麼用指令去解決,又不喜歡修改 ~/.ssh/known_hosts
,記錄一下解決方式
在透過 SSH 連線目標主機時,如果是第一次連線,會出現以下訊息,詢問是否要繼續連線:
1
2
3
|
The authenticity of host 'x230.ttc.caloskao.org (10.10.3.68)' can't be established.
ECDSA key fingerprint is SHA256:OhTNCCfw+ymd0iRXL/ZEwU9q/uJCNRKHu534yuJCxQI.
Are you sure you want to continue connecting (yes/no)?
|
預設情況下,SSH 在和目標主機進行交涉時,目標主機會傳送 public key fingerprint 給 client 進行比對,這個動作是防禦 中間人攻擊 (MITM) 的一種手段。第一次連線時因為 client 並沒有先前的 public key 記錄,所以就會出現這樣的訊息。輸入 yes 後,便會將 public key 儲存在 ~/.ssh/known_hosts
,並繼續進行驗證。下一次連線時,就會知道這台主機已經驗證過身份,可以直接跳到 client 身份驗證的步驟。
如果主機重灌系統、有人進行中間人攻擊或是其它原因,使目標主機的公鑰發生變化,會出現以下訊息:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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:OhTNCCfw+ymd0iRXL/ZEwU9q/uJCNRKHu534yuJCxQI.
Please contact your system administrator.
Add correct host key in /home/Calos/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/Calos/.ssh/known_hosts:52
ECDSA host key for 10.0.0.16 has changed and you have requested strict checking.
Host key verification failed.
|
基於安全考量下,SSH 會直接終止連線。
在排除安全性疑慮後,我們需要更新 public key,才可以連線到目標主機。使用 ssh-keygen
移除舊的 public key,之後重新走一次認證流程就行了。(舊的 public key 會被轉存到 ~/.ssh/known_hosts.old
)
1
2
3
4
|
ssh-keygen -R 10.0.0.16
# Host 10.0.0.16 found: line 52
/home/Calos/.ssh/known_hosts updated.
Original contents retained as /home/Calos/.ssh/known_hosts.old
|
直接透過文字編輯器修改 ~/.ssh/known_hosts
,或是整個砍掉也不是不行,但一個麻煩,另一個會砍掉其它主機的 public key,所以比較推薦使用 ssk-keygen
來處理。