我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SSH的实现原理是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SSH的实现原理是什么

本篇内容介绍了“SSH的实现原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

SSH是一种协议标准,它的主要目的是实现远程登录和提供安全网络服务。它的实现有很多种,最常用的就是开源openssh。

对称加密和非对称加密

在讲解SSH实现原理之前,我们先来了解下加密方式,我们都知道为了数据的安全,数据在互联网上传输肯定是要加密。那加密又要分为两种加密方式:

  • 对称加密(秘钥加密)

  • 非对称加密(公钥加密)

对称加密,就是加密和解密都是使用同一套秘钥。看下图所示:

SSH的实现原理是什么

服务端和客户端的交互过程如下图:

SSH的实现原理是什么

对称加密的加密强度很高,但是这有一个很大的问题。就是:如何保证秘钥A的安全?当客户端的数量非常大的时候,如何保证秘钥的安全?一旦秘钥泄漏出去,后果不堪设想。用户的安全就没有任何保障。所以非对称加密的出现就为了弥补这一点。

非对称加密有两个秘钥:“私钥”和“公钥”。公钥加密后的密文,只能通过对应的私钥进行解密。而通过公钥推理出私钥的可能性微乎其微。下图展示的是基本原理:

SSH的实现原理是什么

上图在实际的使用中存在一个问题,就是客户端需要知道服务端的公钥,不然没法加密。所以需要服务端告知客户端公钥的一个过程。如下图:

SSH的实现原理是什么

  • 服务端收到客户端的登录请求,服务端把公钥发送给客户端

  • 客户端用这个公钥,对密码加密

  • 客户端将加密后的密码发送给服务端

  • 服务端用私钥解密,验证OK

  • 返回验证结果

私钥是服务端独有,这就保证了客户端的登录信息即使在网络传输过程中被窃据,也没有私钥进行解密,保证了数据的安全性,这充分利用了非对称加密的特性。

你觉得这样就安全了吗?

上述图中有一个漏洞:客户端如何保证接受到的公钥就是目标服务端的?如果攻击者截获了客户端的请求,发送自己的公钥,那客户端用这个公钥加密的密码,就能被攻击者用自己的私钥解密。这不是一个很大的漏洞吗?

SSH如何做的?

SSH有两种方式:

  • 基于口令的认证;

  • 基于公钥认证

1. 基于口令的认证

从上面可以知道,我们的主要要解决的是“如何对服务端的公钥进行验证”,客户端只要对公钥进行确认下就OK了。通常在第一次登录的时候,系统会出现下面提示信息:

he authenticity of host 'ssh-server.example.com (12.18.429.21)' can't be established. RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d. Are you sure you want to continue connecting (yes/no)?

上面的信息说的是:无法确认主机ssh-server.example.com(12.18.429.21)的真实性,不过知道它的公钥指纹,是否继续连接?

之所以用fingerprint代替key,主要是key过于长(RSA算法生成的公钥有1024位),很难直接比较。所以,对公钥进行hash生成一个128位的指纹,这样就方便比较了。

输入yes后,该host已被确认,并被追加到文件known_hosts中,然后就需要输入密码。

2. 基于公钥认证

  • 客户端与服务端协商产生会话密钥;

  • 客户端会向服务端发送一个登录请求(如:root@192.168.1.2),发送的信息包括用户名root和root的公钥指纹,且所有信息都是通过会话密钥加密过的。

  • 服务端通过会话密钥解密客户端发送的数据得到请求登录的用户名root和root的公钥指纹,然后读取root用户家目录下的所有公钥数据(/root/.ssh/autorized_keys文件中),并分别通过单向加密算法获取各公钥的数据指纹与客户端发送过来的数据指纹做对比,从而找到客户端上的root用户的公钥;

  • 服务端使用找到的客户端的公钥对一个随机数进行加密发送发送给客户端;

  • 客户端使用私钥对服务端发送的随机数密文进行解密,然后把解密结果发送给服务端;

  • 服务端验证客户端解密后的数据与自己发送的数据一致,则对客户端身份验证成功;

“SSH的实现原理是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SSH的实现原理是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SSH的实现原理是什么

本篇内容介绍了“SSH的实现原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!SSH是一种协议标准,它的主要目的是实现远程登录和提供安
2023-06-17

SSH的原理及用法是什么

这篇文章将为大家详细讲解有关SSH的原理及用法是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。SSH的英文全称是Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,
2023-06-13

chatgpt的实现原理是什么

本文小编为大家详细介绍“chatgpt的实现原理是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“chatgpt的实现原理是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。chatgpt的原理ChatGPT
2023-02-21

hooks的实现原理是什么

Hooks是React 16.8版本引入的一种新特性,它可以让我们在不编写class的情况下使用state和其他React的特性。Hooks的实现原理主要有两个方面:1. 使用链表来保存组件的状态:在React内部,使用一个链表来保存每个组
2023-10-10

SSH原理是什么与怎么使用

这篇文章主要介绍“SSH原理是什么与怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SSH原理是什么与怎么使用”文章能帮助大家解决问题。ssh-key密钥常用来管理我们的git仓库,gitla
2023-06-27

sync.Pool的实现原理是什么

本篇内容主要讲解“sync.Pool的实现原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sync.Pool的实现原理是什么”吧!sync.Pool实现原理对象的创建和销毁会消耗一定的系
2023-06-19

ConcurrentHashMap的实现原理是什么

这篇文章将为大家详细讲解有关ConcurrentHashMap的实现原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.HashTable与ConcurrentHashMap的对比H
2023-06-19

CountDownLatch的实现原理是什么

这篇文章主要讲解了“CountDownLatch的实现原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CountDownLatch的实现原理是什么”吧! 前言CountDownLat
2023-06-15

Linux的实现原理是什么

本篇内容主要讲解“Linux的实现原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux的实现原理是什么”吧!1 引言90年代以来,数控技术发展的一个重要趋势是数控系统的开放化。目前
2023-06-16

vuex的实现原理是什么

本篇内容主要讲解“vuex的实现原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vuex的实现原理是什么”吧!关于vuex就不再赘述,简单回顾一下:当应用碰到多个组件共享状态时,简单的单
2023-07-05

java原子类实现的原理是什么

Java原子类的实现原理是利用了底层的CAS(Compare and Swap)操作。CAS是一种乐观锁机制,它包含三个参数:内存位置V,旧的预期值A和新的值B。CAS操作首先将内存位置V的值与预期值A进行比较,如果相等,则将内存位置V的值
2023-10-18

ssh框架原理及流程是什么

SSH(Struts2+Spring+Hibernate)框架的项目,该架构主要分为三个层次:(1)Struts2:负责web层(2)Spring:业务层的管理(3)Hibernate:负责数据持久化Struts2工作原理:1.初始化一个指向servlet容器
ssh框架原理及流程是什么
2018-08-18

Java AQS的实现原理是什么

这篇文章主要介绍“Java AQS的实现原理是什么”,在日常操作中,相信很多人在Java AQS的实现原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java AQS的实现原理是什么”的疑惑有所帮助!
2023-07-05

golang select的实现原理是什么

在Go语言中,`select`语句用于从多个通道中接收数据,并且只有当其中一个通道可以接收数据时,`select`语句才会执行相应的代码块。`select`语句的实现原理是通过轮询的方式来监听通道的状态。当`select`语句执行时,它会
2023-10-27

Vue-Router的实现原理是什么

这篇文章主要介绍“Vue-Router的实现原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue-Router的实现原理是什么”文章能帮助大家解决问题。路由既然我们在分析路由,我们首先来说
2023-07-04

NotificationCenter类的实现原理是什么

这篇文章主要讲解了“NotificationCenter类的实现原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“NotificationCenter类的实现原理是什么”吧!正文Not
2023-07-05

java lock的实现原理是什么

Java中的锁(Lock)是一种同步机制,用于控制多个线程对共享资源的访问。锁的主要作用是确保在同一时刻只有一个线程能够访问某个共享资源,从而防止数据竞争和线程安全问题的发生。Java中的锁主要有两种实现原理:内置锁(synchronize
2023-10-20

Docker exec的实现原理是什么

本篇内容主要讲解“Docker exec的实现原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Docker exec的实现原理是什么”吧!我使用了 docker exec 命令进入到了容
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录