关于ssh的介绍
发布日期:2021-10-23 14:13:20 浏览次数:5 分类:技术文章

本文共 1947 字,大约阅读时间需要 6 分钟。

最近看到一篇关于介绍ssh讲得很清晰的文章,这里来记录一下加深一下印象:

 

基本原理:

SSH(Secure Shell)是一套协议标准,可以用来实现两台机器之间的安全登录以及安全的数据传送,其保证数据安全的原理是非对称加密

传统的对称加密使用的是一套秘钥,数据的加密以及解密用的都是这一套秘钥,可想而知所有的客户端以及服务端都需要保存这套秘钥,泄露的风险很高,而一旦秘钥便泄露便保证不了数据安全。

非对称加密解决的就是这个问题,它包含两套秘钥 - 公钥以及 私钥,其中公钥用来加密,私钥用来解密,并且通过公钥计算不出私钥,因此私钥谨慎保存在服务端,而公钥可以随便传递,即使泄露也无风险。

保证SSH安全性的方法,简单来说就是客户端和服务端各自生成一套私钥和公钥,并且互相交换公钥,这样每一条发出的数据都可以用对方的公钥来加密,对方收到后再用自己的私钥来解密。

 

由上一张图可以看出来,两台机器除了各自的一套公、私钥之外,还保存了对方的公钥,因此必然存在一个交换各自公钥的步骤。

 

 

 

首次建立连接的时候的公钥交换:

建立连接时的公钥交换,实际上并不是简单地交换公钥,而是存在专门的算法,这一步在首次连接时,数据传送之前发生。

  1. 客户端发起链接请求
  2. 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
  3. 客户端生成密钥对
  4. 客户端用自己的公钥异或会话ID,计算出一个值,并用服务端的公钥加密
  5. 客户端发送加密后的值到服务端,服务端用私钥解密
  6. 服务端用解密后的值异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
  7. 至此,双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密

 

这里有一个有趣的地方,两台机器第一次使用SSH链接时,当服务端返回自己的公钥(第2步)的时候,客户端会有一条信息提示,大意是无法验证对方是否可信,并给出对方公钥的MD5编码值,问是否确定要建立链接。

这是因为SSH虽然传输过程中很安全,但是在首次建立链接时并没有办法知道发来的公钥是否真的来自自己请求的服务器,如果有人在客户端请求服务器后拦截了请求,并返回自己的公钥冒充服务器,这时候如果链接建立,那么所有的数据就都能被攻击者用自己的私钥解密了。这也就是所谓的中间人攻击

 

 

 

通过ssh来进行密码登录:

ssh常用来远程登录到别的机器,有两种常用的方法,第一种便是用账号密码来登录:

  1. 服务端收到登录请求后,首先互换秘钥,详细步骤如上一节所述。
  2. 客户端用服务端的公钥加密账号密码并发送
  3. 服务端用自己的秘钥解密后得到账号密码,然后进行验证
  4. 服务端用客户端的公钥加密验证结果并返回
  5. 服务端用自己的秘钥解密后得到验证结果

 

 

 

 

利用公钥来登录:

这是第二种远程登录别的机器的方法,就是利用公钥来登录。

有时候并不是开发者手动去连接服务器,而是客户端的程序需要连接到服务器,这时候用密码登录就不方便,一是需要处理输入密码的问题,二是需要想办法安全的储存密码到程序里,这种情况下便可以利用公钥来进行无密码登录。

或者说你经常要远程连接到某个服务器,又不想次次都输入账号和密码,也可以采用这种方法:

  1. 客户端用户必须手动地将自己的公钥添加到服务器一个名叫authorized_keys的文件里,顾名思义,这个文件保存了所有可以远程登录的机器的公钥。
  2. 客户端发起登录请求,并且发送一个自己公钥的指纹(具有唯一性,但不是公钥)
  3. 服务端根据指纹检测此公钥是否保存在authorized_keys中
  4. 若存在,服务端便生成一段随机字符串,然后利用客户端公钥加密并返回
  5. 客户端收到后用自己的私钥解密,再利用服务端公钥加密后发回
  6. 服务端收到后用自己的私钥解密,如果为同一字符串,则验证通过

 

 

利用公钥登录的关键是必须手动将客户端的公钥添加到服务端,比如GitHub便有这一步骤,添加了之后便可无密码登录。

 

 

 

资料来自:解放号众包平台

这是我看今日头条的时候看到的一篇文章,所以这里直接贴一个今日头条中文章的地址:(本文基本是copy这篇过来的)

https://www.toutiao.com/a6605433008616899076/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1&timestamp=1538185223&app=news_article&utm_source=weixin&iid=11692987337&utm_medium=toutiao_android&group_id=6605433008616899076

 

转载于:https://www.cnblogs.com/wangshen31/p/9726260.html

转载地址:https://blog.csdn.net/weixin_30588827/article/details/98963959 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Qt中绘图坐标QPainter,Viewport与Window的关系
下一篇:【leetcode】Valid Sudoku (easy)

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月30日 23时13分24秒