使用 SSH 连接到一个经常更改 IP 的盒子

使用 SSH 连接到一个经常更改 IP 的盒子

我有一些经常更改其 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

相关内容