欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

禁用远程主机对SSH的公钥进行检查的方法

程序员文章站 2022-06-21 17:14:06
这篇文章主要介绍了禁用远程主机对SSH的公钥进行检查的犯法,SSH 公钥检查有时会带来远程连接时的错误,需要的朋友可以参考下... 15-07-07...

sh 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击。但是在特定情况下,严格的 ssh 公钥检查会破坏一些依赖 ssh 协议的自动化任务,就需要一种手段能够绕过 ssh 的公钥检查。
首先看看什么是 ssh 公钥检查

ssh 连接远程主机时,会检查主机的公钥。如果是第一次该主机,会显示该主机的公钥摘要,提示用户是否信任该主机:

复制代码
代码如下:
the authenticity of host '192.168.0.110 (192.168.0.110)' can't be established. rsa key fingerprint is a3:ca:ad:95:a1:45:d2:57:3a:e9:e7:75:a8:4c:1f:9f. are you sure you want to continue connecting (yes/no)?

当选择接受,就会将该主机的公钥追加到文件 ~/.ssh/known_hosts 中。当再次连接该主机时,就不会再提示该问题了。 如果因为某种原因(服务器系统重装,服务器间ip地址交换,dhcp,虚拟机重建,中间人劫持),该ip地址的公钥改变了,当使用 ssh 连接的时候,会报错:

复制代码
代码如下:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @    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 e9:0c:36:89:7f:3c:07:71:09:5a:9f:28:8c:44:e9:05. please contact your system administrator. add correct host key in /home/jiangxin/.ssh/known_hosts to get rid of this message. offending key in /home/jiangxin/.ssh/known_hosts:81 rsa host key for 192.168.0.110 has changed and you have requested strict checking. host key verification failed.

上面的警告信息说的是:

    服务器公钥已经改变,新的公钥的摘要是:e9:0c:36:89:7f:3c:07:71:09:5a:9f:28:8c:44:e9:05.
    该服务器原来的公钥记录在文件 ~/.ssh/known_hosts 中第 81 行。

如果确认不是中间人劫持,需要连接到该服务器,怎么办呢?最简单的就是用 vi 打开 ~/.ssh/known_hosts 文件,定位到 81 行,将该行删除。之后就可以使用 ssh 连接了。
如何让连接新主机时,不进行公钥确认?

在首次连接服务器时,会弹出公钥确认的提示。这会导致某些自动化任务,由于初次连接服务器而导致自动化任务中断。或者由于  ~/.ssh/known_hosts 文件内容清空,导致自动化任务中断。 ssh 客户端的 stricthostkeychecking 配置指令,可以实现当第一次连接服务器时,自动接受新的公钥。只需要修改 /etc/ssh/ssh_config 文件,包含下列语句:

复制代码
代码如下:
host * stricthostkeychecking no

或者在 ssh 命令行中用 -o 参数

复制代码
代码如下:
$ ssh  -o stricthostkeychecking=no  192.168.0.110

如何防止远程主机公钥改变导致 ssh 连接失败

当确认中间人劫持攻击风险比较小的情况下,才可以使用下面的方法,禁用 ssh 远程主机的公钥检查。 ssh 客户端提供一个 userknownhostsfile 配置,允许指定不同的 known_hosts 文件。那么将 known_hosts 指向不同的文件,不就不会造成公钥冲突导致的中断了么?

复制代码
代码如下:
$ ssh -o userknownhostsfile=/dev/null 192.168.0.110 the authenticity of host '192.168.0.110 (192.168.0.110)' can't be established. rsa key fingerprint is e9:0c:36:89:7f:3c:07:71:09:5a:9f:28:8c:44:e9:05. are you sure you want to continue connecting (yes/no)?

看,提示信息由公钥改变中断警告,变成了首次连接的提示。 和之前提到的 stricthostkeychecking 配置配合使用,则不再有任何警告出现了:

复制代码
代码如下:
$ ssh -o stricthostkeychecking=no -o userknownhostsfile=/dev/null 192.168.0.110 warning: permanently added '192.168.0.110' (rsa) to the list of known hosts. jiangxin@192.168.0.110's password:
如果设置了无口令 ssh 登录(即通过客户端公钥认证),就可以直接连接到远程主机。这是基于 ssh 协议的自动化任务常用的手段。