有没有办法暂时忽略我的~/.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 环境中完全忽略已知主机文件,请将GlobalKnownHostsFile
和UserKnownHostsFile
选项设置为/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"