我在网络上工作,IP地址的系统会经常更改。它们在工作台上移动和离开,DHCP确定它们获得的IP。
如何禁用主机密钥缓存/检查似乎并不简单,这样我每次需要连接到系统时都不必编辑〜/ .ssh / known_hosts。
我不关心主机的真实性,它们都在10.x.x.x网段上,而且我相对确定没有人是MITM的我。
有没有“正确”的方法来做到这一点?我不在乎它是否警告我,但停止并导致我每次刷新我的known_hosts条目的IP是烦人的,在这种情况下,它并没有真正提供任何安全性,因为我很少连接到系统超过一次或两次然后将IP提供给另一个系统。
我查看了ssh_config文件并看到我可以设置组,以便可以保留连接到外部计算机的安全性,我可以忽略检查本地地址。这将是最佳的。
从搜索中我发现了一些非常强烈的意见,包括“不要乱用它,这是为了安全,只是处理它”到“这是我曾经遇到的最愚蠢的事情” ,我只是想把它关掉“......我在中间的某个地方。我只是希望能够完成我的工作,而不必每隔几分钟从文件中清除一个地址。
感谢。
答案 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)
由于每个其他答案都解释了如何禁用密钥检查,这里有两个保留密钥检查的想法,但避免了这个问题:
使用主机名。如果您控制DHCP服务器并且可以分配正确的名称,这很容易。之后你就可以使用已知的主机名,改变的ips并不重要。
使用主机名。即使您不控制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)
答案 5 :(得分:1)
nano ~/.ssh/config
(如果还没有,不用担心,nano将创建一个新文件)
Host 192.168.*
StrictHostKeyChecking no
UserKnownHostsFile /dev/null