写代码的木公

本文转载自:https://baijiahao.baidu.com/s?id=1612411213158569988&wfr=spider&for=pc


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

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

对称加密

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

非对称加密


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

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

SSH会话建立流程

  • step1:客户端发起一个TCP连接,默认端口号为22;
  • step2:服务端收到连接请求后,将自己的一些关键信息发给客户端。这些信息包括:

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

  • step3:生成会话密钥。此时,客户端已经拥有了服务端的公钥。接下来,客户端和服务端需要协商出一个双方都认可的密钥,并以此来对双方后续的通信内容进行加密(一般会使用对称加密算法,经过这步后,客户端和服务端都会有一个相同的秘钥来对通信的内容进行加密)。
  • step4:接下来,客户端将自己的公钥id(服务端可以配置很多公钥文件,所以需要客户端发送一个id说明是哪个公钥文件)发送给服务端,服务端需要对客户端的合法性进行验证:

1)服务端在自己的“authorized_keys”文件中搜索与客户端匹配的公钥。
2)如果找到了,服务端用这个公钥加密一个随机数,并把加密后的结果发送给客户端。
3)如果客户端持有正确的私钥,那么它就可以对消息进行解密从而获得这个随机数。
4)客户端由这个随机数(这个随机数可以看做是盐)和当前的会话密钥(秘钥才是我们真正需要加密的数据)共同生成一个MD5值。
5)客户端把MD5值发给服务端。
6)服务端同样用会话密钥和原始的随机数计算MD5值,并与客户端发过来的值进行对比。如果相等,则验证通过。

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

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

更详细的对SSH的介绍还可以参考这篇文章

【网络安全】SSH协议科普文的更多相关文章

  1. Hadoop科普文——常见的45个问题解答(CSDN)

    Hadoop科普文——常见的45个问题解答 1.Hadoop集群可以运行的3个模式? 单机(本地)模式 伪分布式模式 全分布式模式 2.  单机(本地)模式中的注意点? 在单机模式(standalon ...

  2. 何为SSH协议?

    该文来自百度百科,自我收藏. SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH ...

  3. SSH协议及其应用

    SSH协议及其应用 原文作者:阮一峰 链接: http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html http://www.ruany ...

  4. SSH2.0编程 ssh协议过程实现

    之前为了自己做一套SSH,先自己实现了一套telnet.但经过这么多天的苦逼,发现以前的工作都是徒劳.ssh的协议很繁杂,核心的内容在于密码算法,而且自己很难在网上找到周全的细节讲解与详细的实现,只有 ...

  5. SSH协议详解(转)

    转发的http://blog.csdn.net/macrossdzh/article/details/5691924 很透彻啊,学习了 一.什么是SSH SSH是英文Secure Shell的简写形式 ...

  6. SSH2.0编程 ssh协议过程实现(转)

    SSh协议: 全称为Secure Shell,即很安全的shell,主要目的是用来取代传统的telnet和r系列命令(rlogin,rsh,rexec等)远程登录和远程执行命令的工具,实现远程登录和远 ...

  7. SSH协议(转载)

    一. SSH是什么? SSH的全称是Secure Shell, 是一种"用来在不安全的网络上安全地运行网络服务的一种加密网络协议". 简单说,SSH是一种网络协议,用于计算机之间的 ...

  8. 【转载】SSH协议及其应用

    原文作者:阮一峰 链接: http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html http://www.ruanyifeng.com/ ...

  9. (关于数据传输安全)SSH协议

    这里说的不是java的SSH框架,是1995年,芬兰学者Tatu Ylonen设计的SSH协议. 有计算机网络基础的同学都知道,在网上传输的数据是可以被截取的.那么怎样才能获得安全? 一.春点行话 电 ...

随机推荐

  1. shell特殊符号及cut、sort_wc_uniq、tee_tr_split命令 使用介绍

    第6周第2次课(4月24日) 课程内容: 8.10 shell特殊符号cut命令8.11 sort_wc_uniq命令8.12 tee_tr_split命令8.13 shell特殊符号下 扩展1. s ...

  2. css练习——两列左窄右kuan型

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  3. 深入理解跳跃链表在Redis中的应用

    0.前言 前面写了一篇关于跳表基本原理和特性的文章,本次继续介绍跳表的概率平衡和工程实现,跳表在Redis.LevelDB.ES中都有应用,本文以Redis为工程蓝本,分析跳表在Redis中的工程实现 ...

  4. 带着canvas去流浪系列之六 绘制雷达图

    [摘要] 用canvas原生API实现百度Echarts基本图表. 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 任务说明 使用原生canvas ...

  5. 《手把手教你》系列练习篇之9-python+ selenium自动化测试 -番外篇 - 最后一波啊!!!(详细教程)

    1. 简介 本来上一篇就是练习篇的最后一篇文章了,但是有的小伙伴私下反映说是做了那么多练习,没有一个比较综合的demo练练手.因此宏哥在这里又补存了一些常见的知识点进行练习,在文章最后也通过实例给小伙 ...

  6. 转:IK分词原理

    IKAnalyzer是一个开源的,基于Java语言开发的轻量级的中文分词语言包,它是以Lucene为应用主体,结合词典分词和文法分析算法的中文词组组件.从3.0版本开始,IK发展为面向java的公用分 ...

  7. ssm三大框架整合基本配置

    ssm三大框架整合基本配置 maven目录结构 数据库脚本mysql create database maven; use maven ; -- --------------------------- ...

  8. 洛谷 题解 2165 [AHOI2009]飞行棋

    本蒟蒻又来发题解了, 看到这个题目,本蒟蒻直接开始推公式.. 嗯,可以通过弧长,推出弦长(l = 2 * r * cos(90 * l / (r * Π)); 然后对比各条弦长的平方和与直径的平方. ...

  9. iOS开发经常用到的国外网站,让我们接轨国外的最新技术吧!

    转自:http://www.bubuko.com/infodetail-787949.html 工欲善其事必先利其器,最近发现临时查找一些东西容易浪费时间,花了点时间整理一下常用的网站,方便以后备用. ...

  10. border-radius:50%和100%的区别

    border-radius 值类型-百分比 border-radius的值是百分比的话,就相当于盒子的宽度和高度的百分比. 我们知道在一个正方形内做一个面积最大的圆形,这个圆的半径就为正方形边长的一半 ...