1、原理简介

ssh是一种网络协议,用于计算机的加密登陆,以及一些远程命令执行。

在linux常用指令中,ssh, scp都使用了ssh协议。

ssh协议是采用Rsa加密算法来实现的。

rsa加密算法是一处非对称加密算法,就是指该算法加密和解密使用不同的密钥,即使用加密密钥进行加密、解密密钥进行解密。 在RAS算法中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。

下面使用ssh协议实现登陆的流程来对协议进行说明:

(1)远程主机收到用户的登录请求,把自己的公钥发给用户。

(2)用户使用这个公钥,将登录密码加密后,发送回来。

(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

那么为什么需要fingerprint呢?

这是由于ssh协议的实现机制决定的,ssh协议无法确认远程主机是不要告,出于安全的的考虑增加了fingerprint手动确认,让用户来自动确认主机的可靠怀。

如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪,而攻击者则可以通过用户请求获得远程主机的密码,登陆远程主机。这就是著名的中间人攻击。

2、ssh/scp 跳过首次连接远程主机的fingerprint

当首次ssh或者scp时,会收到系统的如下提示。

The authenticity of host '119.8.35.122 (119.8.35.122)' can't be established. ECDSA key fingerprint is SHA256:vAPUXtKvN3KmiGvq8XEtYUlBI47eiX6fvKp4EPwUm70. Are you sure you want to continue connecting (yes/no/[fingerprint])?

以上确认提示大意为:无法确认19.8.35.122主机的真实可靠性,它的rsa key的指纹是xxx,你是否希望继续连接到该机器?

一旦选择是,则机器19.8.35.122的rsa key就会保存到.ssh/known_hosts中,下次连接时,有了记录,就不会再有相应提示。

当管理的机器非常多时,每一台都需要手动确认是一件非常麻烦的事情,我们要以通过后面的方便来跳过确认。我们可以采用发下两种方式来路过fingerprint确认。出于安全考虑,本机制只建议在内网使用。

方式一:在命令行中添加 -o "StrictHostKeyChecking no"

执行ssh或scp命令时,系统就会自动把远程主机的rsa key加入到.ssh/known_hosts文件中。

ssh -o "StrictHostKeyChecking no" root@host

StrictHostKeyChecking no|ask|yes:

StrictHostKeyChecking代码了远程主机的host key确认方式。有如下几种设置。

no代表不做任何确认,直接通过验证,把rsa加入到.ssh/known_hosts。

ask为默认值,需要用户手动确认是否通过验证,是否把远程主机加入到.ssh/known_hosts中。

yes为最高安全级别,如果本地没有相应的rsa key则会直接拒绝连接,并出给提示。

方式二:修改.ssh/config(或者/etc/ssh/ssh_config)配置后

配置文件修改后,将应用于所有ssh命令,不需要在单命令上指定StrictHostKeyChecking:

在.ssh/config(或者/etc/ssh/ssh_config)中增加如下配置:

StrictHostKeyChecking no

3、处理远程主机rsa key变动的情况

当远程主机的rsa key与本地对不上,则会收到报错。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @    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 50:e6:cb:58:bc:b7:a3:f6:e8:8f:46:a7:c1:5f:c2:df. Please contact your system administrator. Add correct host key in /home/cobyeah/.ssh/known_hosts to get rid of this message. Offending key in /home/cobyeah/.ssh/known_hosts:7 RSA host key for 192.168.0.4 has changed and you have requested strict checking. Host key verification failed.

我们有以下两个方法可以解决。

方法一:设置StrictHostKeyChecking no

方法二:删除.ssh/known_hosts中记录的与远程主机不匹配的rsa key。

4、参考文档

SSH原理与运用(一):远程登录 - 阮一峰的网络日志

解决ssh登录Host key verification failed - IMEIXI4EVER - 博客园

说说SSH、SCP和SFTP的那些事儿 - 云+社区 - 腾讯云

ssh 原理及fingerprint异常处理相关推荐

  1. SSH原理与运用(一):远程登录

    SSH是每一台Linux电脑的标准配置. 随着Linux设备从电脑逐渐扩展到手机.外设和家用电器,SSH的使用范围也越来越广.不仅程序员离不开它,很多普通用户也每天使用. SSH具备多种功能,可以用于 ...

  2. linux操作系统-SSH原理介绍与免密运用与远程命令操作

    PS:运用好SSH,对管理众多服务器可以带来极大的便利.当我们从一台服务器访问另一台服务器,我们可以输入密码访问,并不影响效率.但是当我们需要访问多台服务器,或者几十上百台的时候就有点麻烦了.或者对几 ...

  3. SSH原理与运用:远程登录

    SSH是每一台Linux电脑的标准配置. 随着Linux设备从电脑逐渐扩展到手机.外设和家用电器,SSH的使用范围也越来越广.不仅程序员离不开它,很多普通用户也每天使用. SSH具备多种功能,可以用于 ...

  4. SSH原理之图文详解

    一.Telnet和SSH 1.Telnet        Telnet是一个远程连接服务是一个C/S架构,具有Server端和Client端,Client通过telnet协议连接到服务器端,这是早期常 ...

  5. linux ssh原理

    介绍 ssh分为客户端(client)和服务端(server),在客户端会生成 id_rsa(私钥)和公钥(id_rsa.pub) 客户端将私钥发给服务端 客户端使用私钥将密码加密,并发送给服务端 服 ...

  6. git ssh 原理

    文章目录 验证原理 特点 在gitlab,github上面拷贝代码时,通常用到了git clone ssh://XXX命令.其中ssh指secure shell(一种安全的网络协议),git使用这种协 ...

  7. linux上ssh免密登录原理及实现

    因为我的服务器集群需要回收日志到中央进行统一处理,所以需要建立ssh互信关系实现免密登录.关于ssh的使用大家可能都很熟悉了,我们今天主要来讲下ssh连接和免密登录的原理. scp 传输文件 scp( ...

  8. SSH公钥原理(密钥,秘钥,私钥)(看了还是懵逼啊!)

    文章目录 1. 初见SSH 2. SSH工作原理 1. 基于口令的认证 2.基于公钥认证 3. SSH实践 4 总结 3. 为什么需要known_hosts? 1. 初见SSH SSH是一种协议标准, ...

  9. Git原理 SSH 公钥 私钥的理解

    参考URL:[Jenkins][Git]ssh原理以及与https的区别 - 疲惫的豆豆 - 博客园 基本概念 密钥对:在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布 ...

  10. SSH、SSL与HTTPS

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 关于加密 在解释SSH.SSL与HTTPS协议之前我先介绍一下非对称加密协议.在1976年以前,所有 ...

最新文章

  1. Linux 登陆火星,占有率再超 Windows,NASA 还在 GitHub 发布源码教程
  2. 河南经济管理学校2001级计算机,懂得取舍,习得自主——访管信2001级经英奖学金得主张瑞娟...
  3. 怎样解决VMware虚拟机无法连接外网问题
  4. 判断三维坐标系旋转正方向的简单方法
  5. 分界符 EOF 不使用反斜杠转义的技巧
  6. [翻译] VLDContextSheet
  7. step1 . day5 C语言基础练习之日历(使用函数调用,优化至元年开始时间)
  8. MyEclipse web项目导入Eclipse,详细说明
  9. 查看数据库中存在触发器的表
  10. GeoServer地图开发解决方案(二):地图数据处理篇
  11. Mysql面试常见题
  12. ES6新特性总结 一
  13. 利用idea 打包jar包
  14. 带农历日期的html代码,很全的显示阴历(农历)日期的js代码
  15. win10计算机管理 分区,win10系统自带磁盘管理工具调整硬盘分区大小的详细方案...
  16. 【程序员节】1024程序员节专属程序员的浪漫
  17. 启动docker 服务时 虚拟机端口转发 外部无法访问
  18. RuntimeError: Trying to backward through the graph a second time (or directly access saved tensors a
  19. NLP之NLG入门理解
  20. windows7远程桌面连接时崩溃问题

热门文章

  1. 贝叶斯算法(新闻分类任务)
  2. 推荐一个不错的在线制图网站---ProcessOn
  3. 苹果手机怎么清理听筒灰尘_iPhone手机听筒声音小、有杂音?成都苹果维修点教你轻松解决...
  4. 计算机整个桌面偏左,教你win10电脑屏幕往左偏怎么办
  5. 基于ssm实验室管理系统mysql
  6. win7家庭普通版升级旗舰版 密钥
  7. linux 防火墙 防ddos,Linux防火墙iptables以及如何防御DDOS攻击
  8. 洛克菲勒写给儿子的38封信(上)、起点不决定终点、别让精神破产、我奋斗,我成功、我不依赖天赐的运气,但我靠策划运气平步青云、后退就是投降
  9. linux iso转换成img文件,Ubuntu下将img 转化成iso的号令[Linux安全]
  10. 服务器 cpu 修改vt,虚拟机安装mac必看:Intel CPU虚拟技术VT-x支持列表