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

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

有没有办法暂时忽略我的~/.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$ 

笔记:

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

答案1

您可以暂时ssh -o StrictHostKeyChecking=no关闭检查known_hosts。但我不建议这样做。您确实应该检查主机密钥为何发生变化。

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

Host <your problematic host>
  StrictHostKeyChecking no

答案2

要在 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 证书认证例如验证主机。

答案3

如果您已重新安装服务器,因此标识已发生更改,则只需删除指定的第 155 行/Users/alexus/.ssh/known_hosts并继续。

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

10.52.11.171 server1
10.52.11.171 server2

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

答案4

-o StrictHostKeyChecking=no仅当主机尚未出现在 known_hosts 文件中时才有效。

我认为这样更干净(没有警告),如果您希望主机密钥可能由于虚拟机克隆而发生变化,则强制忽略此类主机,如下所示:

# Handle possible SSH key changes
host_key=$(ssh-keyscan -t rsa ${host_ip})
grep "${host_key}" ~/.ssh/known_hosts >/dev/null || {
    ssh-keygen -R ${host_ip}
    echo ${host_key} >>  ~/.ssh/known_hosts
}

# connect as normal way
ssh root@${host_ip} "hostname"

相关内容