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 |
这会禁用主机确认
假设您使用的是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 |
1 2 3 | Host 192.168.* StrictHostKeyChecking no UserKnownHostsFile /dev/null |
由于其他所有答案都说明了如何禁用密钥检查,因此这里有两个想法可以保留密钥检查,但可以避免该问题:
使用主机名。如果您控制DHCP服务器并可以分配适当的名称,则这很容易。之后,您可以仅使用已知的主机名,更改的ip无关紧要。
使用主机名。即使您不控制DHCP服务器,也可以使用
使用主机密钥签名。生成计算机后,请使用本地CA对其进行签名(您不需要全球信任的CA)。之后,您无需分别信任计算机上的每个主机。您只要知道known_hosts文件中的签名CA就足够了。