[分享] 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