[分享] SSH-遠端公鑰指紋已改變 檢查分享

作者: mikemike1021 (mike)   2021-11-09 00:20:30
https://forum.community.tw/t/topic/190 論壇版
TW Community 是我自架的論壇,可以當作一般論壇使用
也可以當作個人部落格的留言系統,
能用 markdown 並且也能自動將程式碼上色,
歡迎大家來參觀並玩玩看,
如果有個人部落格(電腦相關的)需要留言系統,也可以來信聯絡
以下正題
最近在登入遠端運算資源時,SSH 跳出警告
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
會跳出這個警告是因為,從伺服器拿到的公鑰指紋對不上,目前系統所記錄的,所以
SSH 懷疑是不是有中間人攻擊 ,並禁止此次登入。注意:不一定每次出現這個訊息就是
有問題,還要配合伺服器的訊息才能判斷,例如更新或重新設定 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>` (詳見論壇版,但吻合上面所述)去檢查發生了什麼事。
當有 ED25519 時,會出現
order_hostkeyalgs: have matching best-preference key type ssh-ed25519
ED25519 不同,SSH 就會阻止了,不會看 RSA/ECDSA
暫時解法
可以看到是 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 之後也補上伺服器的資料上。
一開始遇到想說,明明才剛重灌兩三天,怎麼就有安全性上的問題,花了一段時間去確認
可能是哪個環節出了問題,幸好最後不是有資安問題。另外有知道任何除了上述所講的解
法,或者一些相關資料,歡迎留言分享。
作者: ScottOAO (cos)   2021-11-11 20:25:00
Server應該用ssh ca去簽host key

Links booklink

Contact Us: admin [ a t ] ucptt.com