SSH - WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

SSH Nov 7, 2021

最近在登入一些雲端運算資源時,使用 SSH 登入卻出現以下警告

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 ED25519 key sent by the remote host is
SHA256:<FingerPrint>.
Please contact your system administrator.
Add correct host key in /Users/yhmtsai/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in /Users/yhmtsai/.ssh/known_hosts:21
Host key for <server> has changed and you have requested strict checking.
Host key verification failed.

會跳出這個警告是因為,從伺服器拿到的公鑰指紋對不上,目前系統所記錄的,所以 SSH 懷疑是不是有中間人攻擊 (詳見 wiki),並禁止此次登入。注意:不一定每次出現這個訊息就是有問題,還要配合伺服器的訊息才能判斷,例如更新或重新設定 SSH 伺服器設定,可能就會讓該指紋改變,又或者晚點介紹這次遇到的狀況。但幸好該密碼有配合 TOTP (基於時間的一次性密碼演算法),遇到這狀況都沒使用該 TOTP 來登入,所以帳號應該也還是安全的,所以才可以慢慢的去查錯,並通知伺服器管理員。

問題

重複試著登入,有時候可以登入,但有時候會跳出不同的公鑰指紋,另外將 wifi 換成手機網路,但情況還是一樣,加上伺服器公布的指紋只有 RSA/ECDSA 但我所遇到的問題卻是 ED25519,到這邊開始懷疑並不是安全性的問題。到這裡就寫信跟伺服器管理員詢問,並把一些資料我所能找到的分享出來

不同的公鑰指紋?

遇到這個問題時,有想到為了負載的關係,登入伺服器有五台,所以我就直接登入特定的伺服器,而非讓他去自動分配,並記錄下來他所回報的公鑰指紋。而此時有發現其中一台我是可以直接登入成功的,代表其中一台跟我之前登入的是有吻合的。但這裡還不能完全確定,因為我之前在第一次登入時並沒有去確認指紋是否吻合(錯誤示範),但所記錄的 RSA/ECDSA 是有符合的

確認所記錄的公鑰指紋

# 列出所有的指紋 list all finger print
ssh-keygen -l -f ~/.ssh/known_hosts
# 列出特定的伺服器 list finger print of the specific server
ssh-keygen -l -f ~/.ssh/known_hosts -F <伺服器>

利用這個去確認之前紀錄是否吻合伺服器所公開的資料,那 RSA/ECDSA 部分是吻合的,但多紀錄了 ED25519 。這邊有去確認另一台電腦的紀錄,但另一台只有紀錄 RSA 的部分。

只刪掉紀錄中的 ED25519

這其實是伺服器管理員讓我試試看的,那刪掉後其實第一次都可以登入,也沒有跳出任何需要檢查公鑰指紋的提示,或第一次登入需要確認的訊息也沒有,代表 RSA/ECDSA 檢查有通過就可以登入了。但在登入之後會發現 known_hosts 會再次被加入 ED25519(登入後才會被加入),所以只要下次登入到不同台,警告又會跳出來了。

利用 ssh -vvv <server> 去檢查發生了什麼事。

...
debug3: record_hostkey: found key type RSA in file /Users/yhmtsai/.ssh/known_hosts:19
debug3: record_hostkey: found key type ECDSA in file /Users/yhmtsai/.ssh/known_hosts:20
debug3: order_hostkeyalgs: prefer hostkeyalgs: [email protected],[email protected],[email protected],[email protected],ecdsa-sha2-nistp256,rsa-sha2-512,rsa-sha2-256,ssh-rsa
...
debug2: host key algorithms: rsa-sha2-512,rsa-sha2-256,ssh-rsa,ecdsa-sha2-nistp256,ssh-ed25519
...
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521>
... after login 登入後 ...
debug3: client_input_hostkeys: received ED25519 key ...
Adding new key for <server> to /Users/yhmtsai/.ssh/known_hosts: ssh-ed25519 ...

下次登入會因為有 ED25519 在紀錄中了,所以登入時就跟著檢查

debug3: record_hostkey: found key type RSA in file /Users/yhmtsai/.ssh/known_hosts:19
debug3: record_hostkey: found key type ECDSA in file /Users/yhmtsai/.ssh/known_hosts:20
debug3: record_hostkey: found key type ED25519 in file /Users/yhmtsai/.ssh/known_hosts:21
debug3: order_hostkeyalgs: have matching best-preference key type [email protected], using HostkeyAlgorithms verbatim
...
debug2: host key algorithms: rsa-sha2-512,rsa-sha2-256,ssh-rsa,ecdsa-sha2-nistp256,ssh-ed25519
...
Throw Warning

order_hostkeyalgs,發現 ED25519 ,該項符合首選,所以就用它來檢查了

暫時解法

可以看到是 ED25519 這一個會被先確認,所以如果把 ED25519 取消,或者改一下順序會怎麼樣呢?

  • 取消 ED25519: ssh -o HostKeyAlgorithms="-*ed25519*" <server> ,取消掉就可以像之前一樣的登入了
  • 換一下順序: ssh -o HostKeyAlgorithms="ssh-rsa,ecdsa-sha2-nistp256,ssh-ed25519" <server> 這樣出乎我的意料,這樣也過了,但用 -vvv 去看發現,他前面檢查完 RSA 就通過了,登入後如果是不同台就會將所紀錄的 ED25519 換掉
    /Users/yhmtsai/.ssh/known_hosts:21: Removed ED25519 key for host <server>
    Adding new key for <server> to /Users/yhmtsai/.ssh/known_hosts: ssh-ed25519

SSH 版本?

目前應該是覺得 ssh 的版本導致他預設的順序不一樣,會出現警告的那台是 OpenSSH_8.6p1, LibreSSL 2.8.3 ,而另一台則是 OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n ,有試過 ssh -Q key 但看起來一樣,而 ssh -Q sig 只有在 8.6 有,如果有人知道怎麼查詢預設的順序或相關的東西的話,再麻煩留言告知了,謝謝

結語

有將前面所發現的東西,也就是不同的登入伺服器雖然有共通的 RSA/ECDSA 但 ED25519 卻是獨立的,通知伺服器管理員,並提供 ssh -o HostKeyAlgorithms="ed25519" <server> ,就可以強迫登入使用 ED25519 ,他們目前有確認我前面提供的 ED25519 指紋的確是每台所擁有的,所以登入是正常的,另外他們會去看能不能也把 ED25519 也一樣共用,至少會把 ED25519 之後也補上伺服器的資料上。

一開始遇到想說,明明才剛重灌兩三天,怎麼就有安全性上的問題,花了一段時間去確認可能是哪個環節出了問題,幸好最後不是有資安問題。另外有知道任何除了上述所講的解法,或者一些相關資料,歡迎留言分享。

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.