我知道类似的问题已经被问过很多次了,但这里有一个区别:
尝试 ssh 到服务器时我得到:
$ ssh cl11lx
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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
07:51:03:4e:5e:ba:e8:44:70:77:cb:57:78:57:59:35.
Please contact your system administrator.
Add correct host key in /nethome/ajalali/.ssh/known_hosts to get rid of this message.
Offending RSA key in /var/lib/sss/pubconf/known_hosts:8
remove with: ssh-keygen -f "/var/lib/sss/pubconf/known_hosts" -R cl11lx
ECDSA host key for cl11lx has changed and you have requested strict checking.
Host key verification failed.
我发现最相关的问题是这里,由于重复而关闭这个本身被关闭为题外话。但无论如何它们都不一样。另一个相关问题是这里。
在大多数情况下,正如我们所知,您可以通过替换服务器密钥来解决问题,例如运行:
ssh-keygen -R <host>
但是,此解决方案或从文件中删除有问题的密钥都/var/lib/sss/pubconf/known_hosts
无法解决我的问题。
一旦我删除整个文件或删除有问题的密钥,密钥就会回来。
请注意,我的所有系统都是 freeipa 服务器的成员,它本身是后端的 LDAP/Kerberos。
答案1
从发布的日志中可以看出,有问题的键不在其正常位置,即$HOME/.ssh/known_hosts
,而是位于/var/lib/sss/pubconf/known_hosts
。这表明系统安全服务守护进程又名ssd 的正在从另一个来源获取有问题的密钥。
这就是为什么从文件中删除密钥没有任何效果,因为它会被一遍又一遍地从服务器重新获取。
在这种情况下,服务器是 FreeIPA 服务器。因此,要修复此问题,必须更改 IPA 服务器发送的违规密钥。
这可以通过手动更改服务器上的密钥或从服务器上完全删除主机信息并ipa-client-install
再次安装客户端(通过)来完成。
我的问题发生在重新安装客户端操作系统后。因此,从服务器中删除主机信息并重新安装 IPA 客户端对我来说是一个明智的选择。
答案2
TL;DR:在您想要连接的服务器上,运行:
ipa host-mod --sshpubkey="`cat /etc/ssh/ssh_host_ed25519_key.pub`" --sshpubkey="`cat /etc/ssh/ssh_host_ecdsa_key.pub`" --sshpubkey="`cat /etc/ssh/ssh_host_rsa_key.pub`" `hostname`
这里发生的情况是,ssh 客户端正在从 IPA 服务器检索服务器主机的公钥,但 IPA 服务器不知道主机的公钥已经更改。
ssh 得到了旧密钥,ssh 变得不高兴了。
要更新 IPA 服务器中的密钥,请使用ipa host-mod
或 IPA WebGUI。
如果你只需要 ed25519,可以跳过其他密钥。例如:
ipa host-mod --sshpubkey="`cat /etc/ssh/ssh_host_ed25519_key.pub`" `hostname`
使用 WebGUI 需要更多的剪切和粘贴来添加键,因此根据您想要执行的操作,命令行可能是更简单的选择。
如果您想使用 WebGUI 查看或修改 ssh 密钥:
- 导航至
Hosts
->'您的主机'->Settings
- 向下滚动到
SSH Keys
- 使用
show/set
、delete
和add
按钮查看或更新 - 向上滚动并
save
如果你想要一些无需登录目标主机即可获取密钥的方法,请参阅https://unix.stackexchange.com/questions/126908/get-ssh-server-key-fingerprint
答案3
该问题是由 sssd 引起的。我没有重新安装 freeipa,而是采取了以下解决方法:
临时备份 /var/lib/sss/pubconf /var/lib/sss/pubconf_bkp
再次 ssh 到远程机器。这将更新新的主机密钥。
将 /var/lib/sss/pubconf_bkp 移回 /var/lib/sss/pubconf
现在再试一次。该问题不会再次发生。
注意:不要忘记移回 /var/lib/sss/pubconf,否则 LDAP 身份验证将失败
答案4
首先从显示错误的文件中删除主机密钥。在我的情况下,它是 /var/lib/sss/pubconf/known_hosts。然后从源重新生成并推送到 ~/.ssh/known_hosts
从文件中删除键:
ssh-keygen -R <host name or IP for which getting error> -f /var/lib/sss/pubconf/known_hosts
ssh-keygen -R <host name or IP for which getting error> -f ~/.ssh/known_hosts
从源生成并推送到 ~/.ssh/known_hosts
ssh-keyscan -t ecdsa <host name or IP for which getting error> >> ~/.ssh/known_hosts