ssh登录原理解析

article/2025/10/14 9:52:17

1.什么是ssh?

简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

一、ssh 口令登录

  • 1.ssh 口令登录原理图:
    [外链图片转存失败(img-KnSPWHrd-1564037884182)(quiver-image-url/BA848D53EDC8CFF9A1A26F0B99B5618B.jpg)]

原理解析:

从上图中,可以看到我们使用SSH进行登陆时,主要分为以下几步:

  • 用户使用ssh user@host命令对远程主机发起登陆请求;
  • 远程主机将自己的公钥返回给请求主机;
  • 请求主机使用公钥对用户输入的密码进行加密;
  • 请求主机将加密后的密码发送给远程主机;
  • 远程主机使用私钥对密码进行解密;
  • 最后,远程主机判断解密后的密码是否与用户密码一致,一致同意登陆,否则反之。

注意:
这一过程存在漏洞风险。由于SSH不像https协议那样,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。这就导致如果有人截获了登陆请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪,用户再通过伪造的公钥加密密码,再发送给冒充主机,此时冒充的主机就可以获取用户的登陆密码了,那么SSH的安全机制就荡然无存了,这也就是我们常说的中间人攻击。

known_hosts文件的作用

既然存在这种问题,SSH就想了一个办法来绕开这个问题,也就是.sknown_hosts文件的作用。

  • 我们在使用SSH登陆远程主机的时候,有时会看到这样的提示:
    • ssh root@49.234.102.232
      [外链图片转存失败(img-fBrCdHAo-1564037884184)(quiver-image-url/F7546CB46B452339813D9DDF3B1354CD.jpg)]
    • ‘yes’ 提示输入密码
      [外链图片转存失败(img-odbRSzn8-1564037884185)(quiver-image-url/70552EA6960A9FD4BDCA306789A61F2D.jpg)]
The authenticity of host '49.234.102.232 (49.234.102.232)' can't be established.
ECDSA key fingerprint is SHA256:IJb73Cd9Gy/mr3p8uNWD5gJScTfsN8uQPMrwweTGTXY.
Are you sure you want to continue connecting (yes/no)?
  • 上面这段话的意思是,无法确认49.234.102.232主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?这样我们就可以看到,SSH是将这个问题抛给了SSH使用者,让SSH使用者自己来确定是否相信远程主机。但是这样对于用户来说,就存在一个难题,用户怎么知道远程主机的公钥指纹是多少;这的确是一个问题,此时就需要远程主机必须公开自己的公钥指纹,以便用户自行核对。

  • 在经过用户的风险衡量以后,用户只需要输入yes来决定接受这个远程主机的公钥。紧接着,系统会出现以下这样的一句提示,表示远程主机已经得到认可:
    Warning: Permanently added '49.234.102.232' (ECDSA) to the list of known hosts.

  • 当远程主机的公钥被接受以后,它就会被保存在文件~/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。

  • 但是由于known_hosts这个机制的存在,也会引起一些问题,比如远程主机的重新装操作系统了,远程主机就会重新生成公钥,如果我们再登陆远程主机时,由于我们本地的known_hosts文件中记录了原来的公钥,此时就会提示指纹认证失败的错误,这个时候我们只需要删除本地的known_hosts文件即可。又比如,我们经常会写一些自动化的脚本,会自动的登陆到远程主机上去,但是这个known_hosts机制却必须要我们手动输入yes才能完成远程登陆,这样整个自动化登陆就无法完成了,但是我们可以通过修改/etc/ssh/ssh_config配置文件,跳过这个known_hosts的询问机制,将# StrictHostKeyChecking ask修改为StrictHostKeyChecking no即可。

二、公钥免密登录

在我们日常工作中,总是会挂很多的自动化脚本,比如自动的登陆到一台远程主机上进行一些操作,又比如Ansible就可以配置自动登陆到远程主机,但是上面说到的SSH,都需要密码登陆,那如何让SSH免密登陆,实现我们的自动登陆需求呢?这就是这里要将的公钥免密登陆。

  • 1.ssh绵密登录原理图
    [外链图片转存失败(img-MrAeZnFY-1564037884186)(quiver-image-url/7CF8123318AAB2C2CBB214515E6CF8BB.jpg =585x640)]

###原理解析:

上图就是ssh免密登陆原理图,从上图可以看出,SSH免密登陆的前提是使用ssh-keygen -t RSA生成公私秘钥对,然后通过ssh-copy-id -i ~/.ssh/id_rsa.pub user@host命令将公钥分发至远程主机。接下来的每次免密登陆步骤如下:
解析:

  • ssh-keygen -t RSA 生成密钥对
  • ssh-copy-id -i ~/.ssh/id_rsa.pub user@host 将公钥发送到远程主机,会存在.ssh/authorized_keys 文件中
  • 用户使用ssh user@host命令对远程主机发起登陆;
  • 远程主机对用户返回一个随机串;
  • 用户所在主机使用私钥对这个随机串进行加密,并将加密的随机串返回至远程主机;
  • 远程主机使用分发过来的公钥对加密随机串进行解密;
  • 如果解密成功,就证明用户的登陆信息是正确的,则允许登陆;否则反之。

[外链图片转存失败(img-KTuLkODB-1564037884187)(quiver-image-url/883D8335DEF0B6F035C11322229DB87F.jpg)]
[外链图片转存失败(img-TPMANcKg-1564037884187)(quiver-image-url/6FA0CA337EB28587FDB601749DDCFF3F.jpg)]


http://chatgpt.dhexx.cn/article/D00r3VIA.shtml

相关文章

Linux下SSH登录的三种方式

SSH登录 SSH密钥登录:SSH默认采用密码登录,这种方法有很多缺点,简单的密码不安全,复杂的密码不容易记忆,每次手动输入也很麻烦。密钥登录是更好的解决方案。接下来介绍三种SSH的登录方式。 一:SSH口令登录 …

CSS实现横或竖的分隔线分界线

在仿b站主页的时候&#xff0c;遇到分割线的问题。 横分割线一般使用标签hr 竖分割线其实可以用div的背景色来做 html代码 <div class"line"></div>css代码 .line{background:#E7E7E7;/*背景色为浅灰色*/width:0.6px;/*设置宽高*/height:45px;positi…

css3 做一个漂亮的分割线

原文出处&#xff1a; http://blog.csdn.net/majormayer/article/details/50996444 在网页中我们经常会用到分割线&#xff0c;但是原始的分割线并不太美观&#xff0c;我们可以用css3的skew属性做一个美观一点的分割线&#xff1a; 效果&#xff1a; 分辨率改变&#xff…

html页分割线最简单的实现方式

我们在写前台页的时候一般会碰到需要实现两个快中间加一条竖线&#xff0c;这样会使得页面分布更加清晰&#xff0c;下面就来说一说我的分割线的实现方式&#xff0c;设置一个div并给他设置宽高&#xff0c;然后设置其边框的颜色和宽度。 竖向分割线&#xff1a; <body>…

【html问题】在网页中添加垂直分割线

html中添加水平分割线的方法非常简单&#xff0c;就是使用<hr>标签&#xff0c;但是却没有简单的添加垂直分割线的方法&#xff0c;我在学习的这段时间&#xff0c;自己琢磨了一些添加垂直分割线的方法。 1.在文本中直接使用符号"|"。 优点&#xff1a;简单方…

css之分割线特效

温馨小提示&#xff0c;下面的盒子用的都是Grid布局&#xff0c;如果想要其他布局可以点击这里 CSS Grid Generator 盒子html <div class"parent1"><div class"div1">斜分割线</div><div class"div2">SETTINGS</di…

HTML--页面分割

页面分割排版&#xff0c;最终效果图示&#xff1a;&#xff08;手绘&#xff0c;比较简陋。&#xff09; 思路。一共四个html页面&#xff0c;一个做个父页面home.html&#xff0c;另外三个分别是top.html, left.html, right.html 然后把后面三个html页面拼在一起&#xff0…

HTML设置水平分割线

2019独角兽企业重金招聘Python工程师标准>>> 在Web中使用水平分割线可以分割不同的文字段落或者其它网页组件,轻松地修饰了段落排版,使之更美观。当然,水平分割线还可以更加明显地突出某一段重要的文字,使之更加醒目。 使用<hr>标签可以轻松地设置一条水平…

HTML链接(详细)与分割线(部分)

&#xff08;一&#xff09;说明模块 HTML链接用法------三种属性&#xff1a; * href属性&#xff1a;指定跳转目标&#xff0c;也就是指定需要打开的链接地址&#xff0c;是必须存在的&#xff0c;不可缺省的 * target属性&#xff1a;指定链接标签的弹出方式&…

Web前端基础—html

目录 1. html简介 1.1 常用标签介绍 1.1.1 input输入功能 1.1.2 html的列表 1.1.3 标题标签 1.1.4 分割线 1.1.5 视频播放 1.1.6 一个超简单的作业演示&#xff08;初识style&#xff09; 1. html简介 <!DOCTYPE html><html lang"en"><head&g…

html分割线

34755人阅读 各种分割线Html代码 一、基本线条&#xff1a; 1、<HR> 2、<HRaligncenter width300 color#987cb9SIZE1> align线条位置&#xff08;可选left、right、center&#xff09;&#xff1b;width线条长度&#xff1b;color颜色&#xff1b;size厚度 二、…

html几种美丽的分割线

普通 <HR> <HR aligncenter width300 color#987cb9 SIZE1> align 线条位置&#xff08;可选left、right、center&#xff09;&#xff1b;width 线条长度&#xff1b;color 颜色&#xff1b;size 厚度 特效&#xff08;效果并不是孤立的&#xff0c;可相互组合&am…

Python机器学习基础教程

Python机器学习教程 第一章&#xff1a;对于机器学习&#xff0c;我们选择了Python 第二章&#xff1a;了解SciPy、Pandas 持续更新 ... ...

[机器学习实战] 机器学习基础

1. 机器学习的主要任务&#xff1a;&#xff08;分类、回归&#xff09;有监督学习、&#xff08;聚类、密度估计&#xff09;无监督学习 2. 如何选择合适算法&#xff1a;使用机器学习的目的&#xff1b;需要分析的数据是什么&#xff1b;——分类、回归、聚类还是密度估计&am…

机器学习基本概念

本文首先介绍机器学习的基本流程&#xff0c;然后针对机器学习涉及的数据、算法和评估这三个方面用到的基础概念进行介绍。 1.机器学习流程 机器学习是一个数据流转、分析以及得到结果的过程&#xff0c;它的整个流程大致可以分为六个步骤&#xff0c;按照数据流自上而下的顺…

机器学习基础——损失函数与风险函数

机器学习的目标是从模型的假设空间中选取最优的模型&#xff0c;其具体的策略有经验风险最小化和结构风险最小化。下面简单介绍损失函数和风险函数的相关概念。参考自李航《统计学习方法》。 损失函数 损失函数(loss function)用来预测模型单次预测的好坏&#xff0c;即模型的…

机器学习基础知识之概率论基础详解

机器学习基础知识之概率论基础详解 文章目录 机器学习基础知识之概率论基础详解引言一、随机事件以及其运算1、样本空间的概念2、随机事件3、随机变量4、事件之间的关系4.1包含关系4.2相等关系4.3互不相容 5、事件间的运算5.1并5.2交5.3差5.4对立事件5.5运算性质 6、事件域 二、…

【机器学习基础】机器学习模型与算法最全分类汇总!

机器学习 Author&#xff1a;louwill Machine Learning Lab 本文总共涉及了26种机器学习模型与算法&#xff0c;几乎涵盖了全部主流的机器学习算法。包括线性回归、逻辑回归、Lasso回归、Ridge回归、线性判别分析、近邻、决策树、感知机、神经网络、支持向量机、AdaBoost、GBDT…

python基础教程免费下载-《Python机器学习基础教程》高清版免费PDF下载

Python机器学习基础教程-[德] 安德里亚斯穆勒(Andreas C.Mller)[美]莎拉吉多(Sarah Guido) 著,张亮(hysic) 译 下载地址1:网盘下载 下载地址2:网盘下载 内容简介 本书是机器学习入门书,以Python语言介绍。主要内容包括:机器学习的基本概念及其应用;实践中常用的…

机器学习开发框架

目录 目录 1.什么是机器学习开发框架 2.机器学习框架和深度学习框架的关系 3.常见深度学习框架 1.什么是机器学习开发框架 机器学习开发框架本质上是一种编程库或工具&#xff0c;目的是能够让开发人员更容易、更快速地构建机器学习模型。 机器学习开发框架封装了大量的可…