我有一些经常更改其 IP 的云盒。
我使用主机名进行 ssh,但由于此错误消息,每次服务器启动时都必须编辑 known_hosts 文件:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is…
除了与我想要做的事情相关的任何安全风险等之外,有没有办法忽略这个错误或自动覆盖known_hosts文件,这样我就不必总是自己编辑它了?
答案1
编辑您的.ssh/config
文件并为此服务器添加配置:
Host frequent-rotation.example.com
CheckHostIP no
CheckHostIP 默认为“是”。它的作用是执行您未通过的那种检查。关闭它意味着它只相信 IP 是可变的,并将根据主机名进行密钥检查。
答案2
补充:你可以尝试只禁用 CheckHostIP 检查那姓名:
Host *
[ global settings .. ]
Host very.dynamic.host
CheckHostIP no
答案3
这里的许多答案都可行 - 但从技术上讲,它们只是权宜之计。OpenSSH 已经有一个内置功能,考虑到了这一点:HostKeyAlias
。
在您的 .ssh/config 文件中,添加HostKeyAlias <alias>
到主机配置:
host myserver.example.com
HostKeyAlias myserver.example.com
有了这个,连接到服务器myserver.example.com
将不会使用主机名或者本地引用的 IP 地址 - 它将始终仅有的连接到该服务器时使用给定的 HostKeyAlias。对我来说,使用主机名是有意义的 - 但您当然可以使用任何您喜欢的别名。
我自己对动态主机的典型配置如下:
host myserver
hostname myserver.dyn.example.com
HostKeyAlias myserver.private.example.com
这也可以用于一些模糊的场景,即你知道一堆服务器具有相同的主机密钥(通常这应该不是是这种情况)。这样可以防止重复条目。将来,如果密钥合法更改,您不必替换/删除多个条目。只有一个。Gitlab Geo 服务器就是一个很好的例子。
关于清除 known_hosts 文件,我建议查看其他与维护/删除过时的 known_hosts 条目特别相关的问题/答案。例如,请参阅https://serverfault.com/questions/29262/how-to-manage-my-ssh-known-hosts-file;我对用户 1953828 的回答印象特别深刻,尽管我发现它(目前)还没有获得太多赞同票。:)
答案4
您可以将其放入文件CheckHostIP no
中~/.ssh/config
,但这会让您面临欺骗攻击。如果您不担心这一点,那么此设置应该会关闭检查known_hosts
。