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

SSH on Linux: Disabling host key checking for hosts on local subnet (known_hosts)

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

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

我不在乎主机的真实性,它们都位于10.x.x.x网段上,并且我相对确定没有人在给我MITM。

是否有"适当"的方法来做到这一点?我不在乎它是否会警告我,但是每次都暂停并导致我刷新该IP的known_hosts条目很烦人,在这种情况下,它实际上没有提供任何安全性,因为我很少会多次连接到系统一次然后将IP分配给另一个系统。

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

通过搜索,我发现了一些非常强烈的意见,从"不要搞砸,它只是为了安全,请处理它"到"这是我曾经必须处理的最愚蠢的事情,我只是想要关闭它"。。。我在中间的某个地方。我只希望能够完成工作而不必每隔几分钟从文件中清除一个地址。

谢谢。


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

1
2
3
4
5
6
7
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中。请注意,作为附加值,我添加了用于连接主机的默认用户,尝试几种不同的识别私钥的选项。


假设您使用的是OpenSSH,我相信您可以设置

1
CheckHostIP no

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

CheckHostIP

If this flag is set to 'yes', ssh(1)
will additionally check the host IP
address in the known_hosts file. This
allows ssh to detect if a host key
changed due to DNS spoofing. If the
option is set to 'no', the check will
not be executed. The default is
'yes'.


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

我需要的选项是:

1
NoHostAuthenticationForLocalhost yes

顾名思义,它仅适用于本地主机。


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

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

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

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

    由于其他所有答案都说明了如何禁用密钥检查,因此这里有两个想法可以保留密钥检查,但可以避免该问题:

  • 使用主机名。如果您控制DHCP服务器并可以分配适当的名称,则这很容易。之后,您可以仅使用已知的主机名,更改的ip无关紧要。

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

  • 使用主机密钥签名。生成计算机后,请使用本地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)