Linux上的SSH:禁用本地子网上主机的主机密钥检查(known_hosts)

我工作在一个IP地址系统经常变化的networking上。 他们在工作台上下移动,DHCP决定他们获得的IP。

如何禁用主机密钥caching/检查似乎并不简单,这样我就不需要每次需要连接到系统时都要编辑〜/ .ssh / known_hosts。

我不关心主机的真实性,他们都在10.xxx网段,我相对肯定没有人正在MITM'ing我。

有没有一个“适当”的方法来做到这一点? 我不关心它是否会警告我,但是每次都停止并导致我冲刷该IP的known_hosts条目是令人讨厌的,在这种情况下,它并不真正提供任何安全性,因为我很less连接到系统超过一次或两次然后IP被赋予另一个系统。

我查看了ssh_config文件,发现我可以设置组,以便连接到外部机器的安全性可以保留,我可以忽略检查本地地址。 这将是最佳的。

从search中我发现了一些非常强烈的意见,从“不要乱搞,安全,处理”到“这是我曾经遇到过的最愚蠢的事情,我只是想把它关掉“…我在中间的某个地方。 我只是想能够做我的工作,而不必每隔几分钟从文件中清除一个地址。

谢谢。

这是我用于我们不断变化的EC2主机的configuration:

maxim@maxim-desktop:~$ cat ~/.ssh/config Host *amazonaws.com IdentityFile ~/.ssh/keypair1-openssh IdentityFile ~/.ssh/keypair2-openssh User ubuntu StrictHostKeyChecking no UserKnownHostsFile /dev/null 

这将禁用主机确认StrictHostKeyChecking no ,也使用一个很好的黑客来防止ssh将主机标识保存到一个持久性文件UserKnownHostsFile /dev/null请注意,作为一个附加值,我添加了连接到主机的默认用户select尝试几个不同的识别私钥。

假设你正在使用OpenSSH,我相信你可以设置

 CheckHostIP no 

选项以防止在known_hosts中检查主机IP。 从手册页:

CheckHostIP

如果此标志设置为'yes',则ssh(1)将另外检查known_hosts文件中的主机IP地址。 这允许ssh检测由于DNS欺骗而导致主机密钥是否改变。 如果选项设置为“否”,则不会执行检查。 默认是“是”。

这花了我一会儿才发现。 我见过的最常见的用例是当你有远程networking的SSH隧道。 这里的所有解决scheme都产生了破坏我的Nagios脚本的警告。

我需要的选项是:

 NoHostAuthenticationForLocalhost yes 

其中,顾名思义也只适用于本地主机。

如果您想暂时禁用或不需要更改SSHconfiguration文件,则可以使用:

 ssh -o UserKnownHostsFile=/dev/null username@hostname 

由于每个其他的答案解释了如何禁用密钥检查,这里有两个想法来保存密钥检查,但避免了这个问题:

  1. 使用主机名。 如果您控制DHCP服务器并且可以分配正确的名称,这很容易。 之后,你可以使用已知的主机名,改变ips无关紧要。

  2. 使用主机名。 即使您不控制DHCP服务器,也可以使用avahi这样的服务,它将在本地networking中广播服务器的名称。 它负责解决碰撞和其他问题。

  3. 使用主机密钥签名。 在构build机器之后,请使用本地CA签名(不需要全局信任的CA)。 之后,你不需要在你的机器上单独信任每个主机。 这已经足够让您信任known_hosts文件中的签名CA. 更多信息在ssh-keygen手册页或许多博客文章( https://www.digitalocean.com/community/tutorials/how-to-create-an-ssh-ca-to-validate-hosts-and-clients -with-ubuntu )