SSH 进入一个经常更改 IP 的盒子

con*_*are 31 ssh bash known-hosts fingerprint

我有一些经常更改 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…
Run Code Online (Sandbox Code Playgroud)

除了任何安全风险以及与我想做的事情相关的风险之外,有没有办法忽略此错误或自动覆盖 known_hosts 文件,以便我不必总是自己编辑它?

Koo*_*out 33

另外:你可以尝试只禁用的CheckHostIP检查名:

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no
Run Code Online (Sandbox Code Playgroud)

  • 这是减少禁用 IP 检查的安全影响的最佳选择。 (6认同)

sys*_*138 26

编辑您的 ssh_config 文件并添加更改此行:

CheckHostIP no
Run Code Online (Sandbox Code Playgroud)

CheckHostIP 默认为“是”。这只是做你失败的那种检查。关闭它意味着它只相信 IP 是可变的,并且会根据主机名进行密钥检查。

  • 这将禁用您将连接到的*所有*服务器的安全功能,这是非常糟糕的做法。您应该改为*仅*为您知道会遇到此问题的特定主机使用此选项 - 或使用 HostKeyAlias 选项 - 再次用于特定主机。 (4认同)
  • 最好在每个主机上使用此设置。因此,编辑“~/.ssh/config”并添加“Host主机名”,然后在该行下放置“CheckHostIP no”。这样它只会影响该主机而不是全局操作。显然很多人想指出这一点,但无法编辑原始帖子(编辑队列已满;呃)。 (2认同)

zaT*_*cky 10

这里的很多答案都有效 - 但从技术上讲,它们是解决方法。考虑到这一点,OpenSSH 已经有一个内置功能:HostKeyAlias.


在 .ssh/config 文件中,添加HostKeyAlias <alias>到主机配置:

host myserver.example.com
HostKeyAlias myserver.example.com
Run Code Online (Sandbox Code Playgroud)

有了这个,连接到服务器myserver.example.com将不会使用主机名IP 地址作为本地参考——它在连接到该服务器时将始终使用给定的 HostKeyAlias。对我来说,使用主机名是有意义的 - 但你当然可以使用任何你喜欢的别名。


我自己的动态主机的典型配置如下:

host myserver
hostname myserver.dyn.example.com
HostKeyAlias myserver.private.example.com
Run Code Online (Sandbox Code Playgroud)

这也可以用于一些晦涩的场景,其中您知道一堆服务器具有相同的主机密钥(通常应该是这种情况)。这将防止重复条目。将来,如果密钥合法更改,您不必替换/删除多个条目。只有一个。Gitlab 地理服务器就是一个很好的例子。


关于清除 known_hosts 文件,我建议查看与维护/删除陈旧的 known_hosts 条目特别相关的其他问题/答案。例如,参见https://serverfault.com/questions/29262/how-to-manage-my-ssh-known-hosts-file;user1953828 的回答给我留下了特别深刻的印象,尽管我看到它没有很多赞成票(还)。:)

  • 这表明当日答案对 SO 与 8 年后回答的正确答案的价值有多大。 (3认同)