暂时忽略我的`~/.ssh/known_hosts` 文件?

ale*_*xus 76 linux ssh

有没有办法暂时忽略我的~/.ssh/known_hosts文件?

mbp:~ alexus$ ssh 10.52.11.171
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /Users/alexus/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/alexus/.ssh/known_hosts:155
RSA host key for 10.52.11.171 has changed and you have requested strict checking.
Host key verification failed.
mbp:~ alexus$ 
Run Code Online (Sandbox Code Playgroud)

笔记:

.. 通过一些回答/评论,我意识到我的问题有点误导,所以它很短,这是预期的行为),所以这是正常的(就我而言)背后有一个有效的理由说明为什么我想看“忽略它”)

小智 91

您可以使用暂时ssh -o StrictHostKeyChecking=no关闭检查known_hosts。但我建议不要这样做。您应该真正检查主机密钥更改的原因。

另一种选择是~/.ssh/config为相关主机添加特定条目。如果您有某个主机每次重新启动时都会生成新的主机密钥,并且每天因正当理由多次重新启动,那么这可能是有效的方法。

Host <your problematic host>
  StrictHostKeyChecking no
Run Code Online (Sandbox Code Playgroud)

  • @alexus 请记住,如果您这样做,您将几乎失去 ssh 提供的所有保护。您也可以使用 telnet,因为有人对您进行 MITM 并捕获您的所有流量将是微不足道的。 (2认同)

小智 59

要在 POSIX 环境中完全忽略已知的主机文件,请将GlobalKnownHostsFileUserKnownHostsFile选项设置为/dev/null

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@host

设置该StrictHostKeyChecking=no选项将允许您连接,但 SSH仍会显示警告

ssh -o StrictHostKeyChecking=no user@host

正如其他人所指出的,解决潜在问题可能更好。例如,您可以考虑使用SSH 证书身份验证来验证主机。

  • 这可能是比当前 [最高投票](http://serverfault.com/a/559886/34399) 更好的答案,因为它允许使用密码身份验证,否则将被禁用(当然,您应该了解究竟是什么您在输入密码之前正在做...) (3认同)

eta*_*klo 5

如果您重新安装了服务器并因此更改了标识,您应该删除指定的第 155 行/Users/alexus/.ssh/known_hosts并继续。

如果您在不同的专用网络之间切换,则应使用主机名进行连接,因为 ssh 客户端还将根据主机名保存密钥。将这样的内容添加到您的/etc/hosts

10.52.11.171 server1
10.52.11.171 server2
Run Code Online (Sandbox Code Playgroud)

然后ssh server1在连接到子网 1 和连接到子网 2ssh server2时使用。这样,两台服务器就可以有不同的主机密钥。

  • @alexus 那么你需要 IPv6 :) 但这在你原来的问题中是有用的信息。 (2认同)