SSH到具有频繁更改IP的盒子中


22

我有一些经常更改其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文件,这样我就不必总是自己编辑它了?

Answers:


20

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

CheckHostIP no

CheckHostIP默认为“是”。这只是对您失败的检查进行检查。关闭它意味着它只相信IP是可变的,并且将对主机名进行密钥检查。


2
这将禁用您将要连接到的所有服务器的安全功能,这是非常糟糕的做法。相反,您应该仅对已知会出现此问题的特定主机使用此选项-或对特定主机再次使用HostKeyAlias选项。
zaTricky

@zaTricky“极端不良做法”?嗯,到底有什么极端?我认为这很安全,只是个人喜好。您只需将密钥固定到主机名(而不是IP)即可。对于https,HPKP的工作原理类似,每个人都说它是安全的或过于安全。
kubanczyk

@kubanczyk这是说要使其成为全局设置-我没有指出有关指定主机的任何建议
zaTricky

25

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

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no

5
这是减少禁用IP检查的安全影响的最佳选择。
Espo

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条目特别相关的问题/答案。例如,请参阅如何管理我的.ssh / known_hosts文件。我对user1953828的回答印象特别深刻,尽管我看到它还没有很多支持。:)


这表明当日答案对SO的价值与8年后回答的正确答案相比有多少价值。
parity3

2

我使用这些狡猾的选项来解决此问题。(我的主机的公钥经常被重新生成。因此这消除了IP和密钥检查)

ssh remoteServerName -l username -o "UserKnownHostsFile=/dev/null"

如果密钥保持不变但IP更改,则也可以使用此命令:

ssh remoteServerName -l username -o "CheckHostIP=no"

如果您的服务器经常更改主机密钥,则应考虑设置主机密钥签名
Cameron Tacklind

1

您可以在ssh 客户端配置(即您从其连接的计算机上的〜/ ssh / config文件)中将StrictHostKeyChecking = no设置为忽略警告。


1

您可以将其CheckHostIP no放入~/.ssh/config文件中,但这会使您容易受到欺骗攻击。如果您对此不关心,则此设置应关闭known_hosts检查。


0

known_hosts连接到瞬态AWS机器时,避免将指纹添加到我的文件中。我使用诸如

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i secret.pem ec2-user@10.0.0.5

连接到他们。它不会询问您是否要将计算机“添加到已知主机列表中”。替换10.0.0.5为计算机的IP地址和secret.pemSsh密钥的完整路径。您仍然会收到警告,称10.0.0.5已添加了,但实际上已消失了/dev/null。我经常这样做,以至于我在~/.profile

alias awsssh='ssh -i secret.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

ssh ec2-user@example.com为检查指纹保留了麻烦,因此为机器保留了类型命令。


这使得服务器你永远只能连接到一次感觉-但有没有更好的办法来摆脱陈旧的条目-你不应该关心你的脏known_hosts文件是如何。您可能花了更多的时间和精力来创建该别名,而不是为别名带来的价值。
zaTricky

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.