SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击。但是在特定情况下,严格的 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 协议的自动化任务常用的手段。

禁用 SSH 远程主机的公钥检查相关推荐

  1. linux系统禁用ssh,怎么在Linux系统中禁用 SSH

    今天微子网络与你分享了如何在Linux系统中禁用SSH,微子网络认为这很实用,所以他分享给你学习.希望你看完这篇文章能有所收获.话不多说,让我们和微子网络一起看看 SSH是什么? Openssh叫做O ...

  2. 禁用 ssh agent_如何修复“禁用Agent XP”错误

    禁用 ssh agent This article explains how we can fix SQL Server error "Agent XPs Disabled". B ...

  3. 树莓派ssh连接使用公钥免密登录

    之前将树莓派做了内网穿透,然后为了防止ssh被暴力破解,以下是我给自己的树莓派400创建了一个ssh公钥的完整过程. 1. 制作公钥 创建公钥我们要使用到 ssh-keygen #命令格式 ssh-k ...

  4. SSH如何通过公钥连接云服务器

    导读 通常我们连接远程服务器(linux)windows下通过putty或xshell等工具远程连接.linux下可以直接通过ssh命令连接.其实这两者都是一致的,都是通过ssh协议进行传输. 如果我 ...

  5. Xshell配置ssh使用密钥公钥(publice key)登录

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ultraera.blog.51cto.com/6640392/1671351 大 ...

  6. linux ssh认证(公钥机)配置

    一.产生背景 在实际工作中,linux集群需要自动化的管理,市面上较常见的自动化运维工具诸如ansible,puppet,saltstack:轻量级的有pssh系列,这其中大多数工具使用的前提就是集群 ...

  7. 设置 SSH Key,添加公钥和私钥

    设置 SSH Key 可以参考码云帮助中心:生成/添加SSH公钥 ssh-keygen -t rsa -C "your_email@example.com" 填写邮箱,这个邮箱不一 ...

  8. linux禁用ssh弱加密算法,SSHSSL弱加密算法漏洞修复

    一.SSH SSH的配置文件中加密算法没有指定,默认支持所有加密算法,包括arcfour,arcfour128,arcfour256等弱加密算法. 修改SSH配置文件,添加加密算法: vi /etc/ ...

  9. linux禁用ssh弱加密算法,ssh弱加密算法漏洞修复

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? ssh弱加密算法漏洞修复 SSH弱加密算法漏洞修复 1.A security scan turned up two SS ...

最新文章

  1. 在线教学生计算机,计算机系统基础—廖浩德老师—在线教学的先行者
  2. 简述冯诺依曼工作原理_深入浅出讲解计算机原理
  3. Elasticsearch 常见的 8 种错误及最佳实践
  4. XCTF-Reverse:game(涉及异或脚本编写)
  5. 帝国cms怎么增加php,帝国CMS增加系统配置字段
  6. webform计算某几列结果_大数据测试场景科普 流计算篇 (上)
  7. bootstrap datetimepicker、bootstrap datepicker日期组件对范围的简单封装
  8. 从JVM的角度看JAVA代码1
  9. ICCV 2019 | 旷视研究院提出VANet:具备视角感知力的车辆重识别网络
  10. Glib2基本api调用流程(十五)
  11. Linux之 find之 ctime,atime,mtime
  12. Android原生PDF功能实现,掌握了这些Android高级工程师必备知识,
  13. 用c语言编写清理c盘程序,C盘清理小程序制作
  14. sh文件执行的时候卡住的可能原因
  15. CameraLink传输协议
  16. 【推荐】智慧城市顶层设计及其建设规划实施解决方案可行性研究报告合集(共107份,963M)
  17. 主机与虚拟机ping通
  18. 大白菜u盘装linux视频教程,大白菜超级U盘教你怎么装系统
  19. 2k14无法打开因为计算机,NBA2K14虚拟光驱SCSI无法开启攻略_NBA2K14提示安装SPTD_快吧单机游戏...
  20. VB定义字符串数组并赋值

热门文章

  1. 实用 / 文艺 / 资深 的APP 《Yee》含全网VIP影视 / 影院热映电影 ----------------基于FusionApp制作
  2. c语言double类型的输入输出
  3. unity判断android设备,unity中判断iphone设备型号的方法
  4. 成功创业的“六字真言”
  5. Windows局域网或PC网线直连中不能被ping通的问题
  6. 小白,你要的Java抽象类,操碎了心!
  7. Pywin32操控Excel——1. 基础操作
  8. CCPC-Wannafly Winter Camp Day3 (Div2, onsite) F 小清新数论 欧拉函数的利用 莫比乌斯反演 杜教筛
  9. 系统编程概述(进程)
  10. . .. ./ ../ 都代表了什么意思?