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

时间:2009-10-31 22:37:18

标签: linux caching ssh ssh-keys

我在网络上工作,IP地址的系统会经常更改。它们在工作台上移动和离开,DHCP确定它们获得的IP。

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

我不关心主机的真实性,它们都在10.x.x.x网段上,而且我相对确定没有人是MITM的我。

有没有“正确”的方法来做到这一点?我不在乎它是否警告我,但停止并导致我每次刷新我的known_hosts条目的IP是烦人的,在这种情况下,它并没有真正提供任何安全性,因为我很少连接到系统超过一次或两次然后将IP提供给另一个系统。

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

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

感谢。

6 个答案:

答案 0 :(得分:86)

这是我用于不断变化的EC2主机的配置:

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请注意,作为附加值,我添加了默认用户连接到主机和尝试几个不同的标识私钥的选项。

答案 1 :(得分:9)

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

CheckHostIP no

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

  

CheckHostIP

     

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

答案 2 :(得分:8)

我花了一段时间才找到。我见过的最常见的用例是你有SSH隧道到远程网络。这里的所有解决方案都产生了警告,这些警告破坏了我的Nagios脚本。

我需要的选项是:

NoHostAuthenticationForLocalhost yes

其中,顾名思义也只适用于localhost。

答案 3 :(得分:2)

如果要暂时禁用此功能或无需更改SSH配置文件,可以使用:

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

答案 4 :(得分:1)

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

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

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

  3. 使用主机密钥签名。构建计算机后,使用本地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

  4. 的更多信息

答案 5 :(得分:1)

  1. 编辑您的〜/ .ssh / config

nano ~/.ssh/config(如果还没有,不用担心,nano将创建一个新文件)

  1. 添加以下配置:
Host 192.168.*
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null