SSH工作原理

熟悉Linux的人肯定都知道SSH。SSH是一种用于安全访问远程服务器的网络协议。它将客户端与服务端之间的消息通过加密保护起来,这样就无法被窃取或篡改了。那么它安全性是如何实现的呢?

为了理解SSH,先要介绍两个重要概念:对称加密和非对称加密。

对称加密:

在对称加密中,客户端和服务端使用同一个密钥对数据进行加密和解密。这种方法的好处是加密强度高,很难破解。缺点也很明显,即密钥本身容易被泄漏。因此,如何保存密钥成为了关键问题。于是引出了第二种加密方式:非对称加密。

非对称加密:

在非对称加密中有两个密钥,公钥和私钥。这两个密钥配对产生和使用。用公钥加密的数据,必须用与其对应的私钥才能解开。并且,私钥无法通过公钥获取。因此,公钥是可以被公开的,而私钥则必须被安全存放。

在SSH中,非对称加密被用来在会话初始化阶段为通信双方进行会话密钥的协商。由于非对称加密的计算量开销比较大,因此一旦双方的会话密钥协商完成,后续的加密都将采用对称加密来进行。

接下来,我们来看一看SSH会话建立的过程。

1. 客户端发起一个TCP连接,默认端口号为22.

2. 服务端收到连接请求后,将自己的一些关键信息发给客户端。这些信息包括:

- 服务端的公钥:客户端在收到这个公钥后,会在自己的“known_hosts”文件进行搜索。如果找到了相同的公钥,则说明此前连接过该服务器。如果没有找到,则会在终端上显示一段警告信息,由用户来决定是否继续连接。

coderunner@geekyshacklebolt:~$ ssh geekyshacklebolt The authenticity of host 'geekyshacklebolt (192.168.42.222)' can't be established. ECDSA key fingerprint is SHA256:Ql/KnGlolY9eCGuYK3OX3opnSyJQzsbtM3DW/UZIxms. Are you sure you want to continue connecting (yes/no)?

- 服务器所支持的加密算法列表:客户端根据此列表来决定采用哪种加密算法。

3. 生成会话密钥。此时,客户端已经拥有了服务端的公钥。接下来,客户端和服务端需要协商出一个双方都认可的密钥,并以此来对双方后续的通信内容进行加密。

密钥协商是通过Diffie - Hellman算法来实现的。具体过程是:

1)服务端和客户端共同选定一个大素数,叫做种子值;

2)服务端和客户端各自独立地选择另外一个只有自己才知道的素数;

3)双方使用相同的加密算法(如AES),由种子值和各自的私有素数生成一个密钥值,并将这个值发送给对方;

4)在收到密钥值后,服务端和客户端根据种子值和自己的私有素数,计算出一个最终的密钥。这一步由双方分别独立进行,但是得到的结果应该是相同的。

5)双方使用上一步得到的结果作为密钥来加密和解密通信内容。

4. 接下来,客户端将自己的公钥id发送给服务端,服务端需要对客户端的合法性进行验证:

1)服务端在自己的“authorized_keys”文件中搜索与客户端匹配的公钥。

2)如果找到了,服务端用这个公钥加密一个随机数,并把加密后的结果发送给客户端。

3)如果客户端持有正确的私钥,那么它就可以对消息进行解密从而获得这个随机数。

4)客户端由这个随机数和当前的会话密钥共同生成一个MD5值。

5)客户端把MD5值发给服务端。

6)服务端同样用会话密钥和原始的随机数计算MD5值,并与客户端发过来的值进行对比。如果相等,则验证通过。

至此,通信双方完成了加密信道的建立,可以开始正常的通信了。

总结:

SSH巧妙地利用了对称加密与非对称加密各自的特点,实现了一套安全保密的远程控制协议。

文章:

https://baijiahao.baidu.com/s?id=1612411213158569988&wfr=spider&for=pc

Linux ssh免密登陆

现在服务端生成公钥,私钥。

ssh-keygen -t rsa

文件夹中就有了

id_rsa私钥,id_rsa_pub公钥

server端: 公钥保存在哪个用户的目录下,就是用哪个用户登录

将公钥保存到服务端/root/.ssh/authorized_key中

cat id_rsa.pub>>~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys 
chmod 700 ~/.ssh

通过scp将服务端的私钥下载到客户端,

scp root@192.168.41.130:/root/.ssh/id_rsa ./

修改服务端config文件,不允许密码登陆,通过密钥登陆

vim /etc/ssh/sshd_config
PasswordAuthentication no      # 口令登录
RSAAuthentication yes         # RSA认证
PubkeyAuthentication yes       # 公钥登录

客户端就可以直接免密来通过私钥登陆

之后可以直接登陆

因为禁止了密码登陆,所以需要利用私钥登陆

补充:

口令验证登录

密钥验证登录

密钥验证的前提需要登陆主机生成一对密钥(公钥和私钥),并将公钥放置在服务器上

文章:

https://www.cnblogs.com/Hi-blog/p/9482418.html

[转+自]SSH工作原理的更多相关文章

  1. 网络数据传输安全及SSH与HTTPS工作原理

    本节内容 网络数据传输安全概述 数据加密算法分类 SSH工作原理 HTTPS工作原理 参考资料 个人一直在努力推动git在公司内部的普及和使用,前些日子在公司内部做了一次分享课,给大家介绍了下项目发布 ...

  2. SSH协议(1)-工作原理及过程

    转载. https://blog.csdn.net/cjx529377/article/details/77659199 SSH全称是Secure Shell,SSH协议是基于应用层的协议,为远程登录 ...

  3. ssh框架的工作原理

    struts2的工作原理 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextClea ...

  4. SSH三大框架的工作原理及流程

    Hibernate工作原理及为什么要用? 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.x ...

  5. [Java] SSH框架笔记_SSH三大框架的工作原理及流程

    Hibernate工作原理及为什么要用? 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.x ...

  6. SSH三大框架的工作原理以及流程

    Hibernate工作原理以及为什么要用 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.x ...

  7. SSH三大框架的工作原理

    Hibernate工作原理 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.xml中的< ...

  8. ssh的原理和流程

    一.strtus:第1步:把上面的jar包下载完成后,先在eclipse中新建一个web工程,新建工程的同时最好选上创建的同时添加web.xml文件 第2步:找到下载并解压好的strtus文件中找到a ...

  9. TCP/IP协议工作原理简述

    TCP/IP协议工作原理简述 // */ // ]]>   TCP/IP协议工作原理简述 Table of Contents 1 概要 2 应用层 3 传输层 4 网络层 5 链路层 1 概要 ...

随机推荐

  1. 改变Dataframe的列的数据类型

    1.查看DataFrame的数据类型 df.dtypes#查看各列数据类型 df[A].dtypes#查看A列数据类型 2.转换DataFrame的数据类型 df[A].astypes(int)#将A ...

  2. 深度强化学习(DRL)专栏(一)

    目录: 1. 引言 专栏知识结构 从AlphaGo看深度强化学习 2. 强化学习基础知识 强化学习问题 马尔科夫决策过程 最优价值函数和贝尔曼方程 3. 有模型的强化学习方法 价值迭代 策略迭代 4. ...

  3. [HDU]1166敌兵布阵<静态线段树>

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 题目大意:给出n个点,每个点有一个值,现在有三种操作, 1.在i点加上j 2.在i点减去j 3. ...

  4. c++ 常量/有符号数和无符号数

    一.宏定义 #define 和常量 const 1. const关键字 const是constant的简写,只要一个变量前面用const来修饰,就意味着该变量里的数据可以被访问,不能被修改.也就是说c ...

  5. MATLAB 概率论题

    1. 用模拟仿真的方法求解 clc clear tic n=0; N=100000; for ii=1:N b='MAXAM'; %字符串格式 a=randperm(5); % b=[b(a(1)), ...

  6. SpringCloud入门(八): Zuul 过滤器详解

    Zuul 过滤器 zuul 有四种过滤器类型,分别是: 1.Pre:过滤器在请求被路由之前调用.我们可利用这种过滤器实现身份验证.在集群中选择请求的微服务.记录调试信息等: 2.Routing:过滤器 ...

  7. 【PHP】函数

    一.      数学中的函数: a)    sin().cos().tan().log() 这些都是数学函数,但是都已经忘了啥意思了!没关系,在php当中的函数和这些函数的概念还是有一定的区别的 二. ...

  8. stdio.h file not found mac catalina clion 头文件 找不到

    问题:mac update catalina 版本之后引发的include文件问题 ​ 近期Mac 版本升级到catalina版本,使用CLion调试c/c++程序,莫名其妙的发现,有些头文件incl ...

  9. 我对KMP算法的理解

    KMP算法的核心在于失配回溯表——pnext,相比于通过逐个比较来匹配字符串的朴素算法,KMP通过对模式串的分析,可以做到比较指针在主串上不回溯,一直向前. 1. KMP如何实现不回溯? 对于主串 t ...

  10. 选择排序(C++,Java,Python实现)

    排序算法之选择排序,选择排序,选择排序的基本思想描述为:每一趟在n-i+1(i=1,2,-,n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录.具体来说,假设长度为n的数组arr,要按照从小 ...