是否可以阻止以下消息:(远程主机标识已更改)
仅使用此连接语法时
ssh xxx.xxx.xxx.xxx
警告消息示例:
ssh 10.19.11.1
CentOS release 5.8 (Final)
Kernel 2.6.18-308.el5 on an i686
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
dd:6f:32:8f:8f:8c:70:9c:95:f1:48:83:60:97:cc:ed.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:7
RSA host key for 10.19.11.1 has changed and you have requested strict checkin.
Host key verification failed.
每次收到这些消息时,我都会清理 /root/.ssh/known_hosts
作为
cp /dev/null /root/.ssh/known_hosts
我还想在 crontab 中设置命令 cp /dev/null /root/.ssh/known_hosts ,
所以每天 24:00 都会清理known_hosts 文件(这个解决方案减少了这个问题,但没有解决它)
所以这个解决方案不是很好的解决方案,因为尽管我们每天清理known_hosts文件,用户仍然可以收到警告消息
也许我们可以在 /etc/ssh/ssh_config 文件上做一些事情来阻止 SSH 主机密钥检查?
评论:
我不想使用以下方法来阻止 SSH 主机密钥检查(因为我使用 Reflection/putty )
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]
我坚持只使用这种语法
ssh xxx.xxx.xxx.xxx
用于连接
答案1
当连接到一次性虚拟机等时,您最好不要首先存储密钥。
创建ssh0
具有以下内容的别名或函数:
alias ssh0='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR'
这样,您就不会~/.known_hosts
用垃圾污染您的文件,并且由于您使用的是不同的命令,因此“真正的”ssh 和用于检测某些本地小部件的 ssh 之间会存在心理界限。
另一个有用的别名是
alias sshy='ssh -o CheckHostIP=no'
当您连接到经常更改 IP 的设备时,例如。家庭路由器,每次重新启动电源时 ISP 都会为其分配不同的 IP。
答案2
更新:现在你可以使用SSH 证书,类似于 TLS 证书。然后您可以添加一个known_hosts
条目来信任证书而不是单独的按键,您将永远不会再收到此消息。
如果你知道主机密钥已更改,您可以从文件中删除该特定条目known_hosts
:
ssh-keygen -R xxx.xxx.xxx.xxx
这比覆盖完整的主机文件(只需使用 即可完成> /root/.ssh/known_hosts
)要好得多。
如果您不想使用ssh
命令行选项,我相信唯一的其他方法是修改 SSH 代码并重新编译。哪个你真的不想做!
答案3
第 1 步:取出有故障的钥匙
ssh-keygen -R 192.168.1.1
第 2 步:添加新密钥
ssh-keyscan 192.168.1.1 >> ~/.ssh/known_hosts
或根据您的情况
> ~/.ssh/known_hosts
ssh-keyscan 192.168.1.1 192.168.1.2 ... >> ~/.ssh/known_hosts
答案4
如果仅连接到 127.0.0.1 (localhost) 很重要,那么这个 ssh 选项应该有效:
-o NoHostAuthenticationForLocalhost=yes
这个选项至少从 OpenSSH 3.7(从 2003 年开始)就已经存在。