您当前的位置:首页 > 电脑百科 > 站长技术 > 网站

图解 SSH 原理

时间:2019-07-24 10:53:32  来源:  作者:

图解 SSH 原理

 

 

1. 初见 SSH

 

SSH是一种协议标准,用于在网络主机之间进行加密的一种协议,其目的是实现安全远程登录以及其它安全网络服务

SSH 仅仅是一协议标准,其具体的实现有很多,既有开源实现的 OpenSSH,也有商业实现方案。使用范围最广泛的当然是开源实现 OpenSSH。

为什么要搞这么个协议呢?其实,很久很久以前,互联网通信都是明文的,一旦在中间环节被某些中间商截获了,我们的通信内容就暴漏无疑。

所以芬兰就有这么一位叫做 Tatu Ylonen 的人设计了 SSH 协议,将信息加密,这样就像上面说的,即使我们的登陆信息在中间被人截获了,我们的密码也不会被泄露。

目前 SSH 协议已经在全世界广泛被使用,且已经在成为各个 linux 发行版的标配。

 

2. SSH 工作原理

 

在讨论 SSH 的原理和使用前,我们需要分析一个问题:为什么需要 SSH?

从 1.1 节 SSH 的定义中可以看出,SSH 和 Telnet、FTP 等协议主要的区别在于安全性。这就引出下一个问题:如何实现数据的安全呢?首先想到的实现方案肯定是对数据进行加密。加密的方式主要有两种:

  1. 对称加密(也称为秘钥加密)
  2. 非对称加密(也称公钥加密)

所谓对称加密,指加密解密使用同一套秘钥。如下图所示:

 

图解 SSH 原理

 

 

图1-1:对称加密-Client端

图解 SSH 原理

 

 

图1-2:对称加密-Server端

对称加密的加密强度高,很难破解。但是在实际应用过程中不得不面临一个棘手的问题:如何安全的保存密钥呢?

尤其是考虑到数量庞大的 Client 端,很难保证密钥不被泄露。一旦一个 Client端的密钥被窃取,那么整个系统的安全性也就不复存在。为了解决这个问题,非对称加密应运而生。非对称加密有两个密钥:“公钥”“私钥”

两个密钥的特性:公钥加密后的密文,只能通过对应的私钥进行解密。而通过公钥推理出私钥的可能性微乎其微。

下面看下使用非对称加密方案的登录流程:

 

图解 SSH 原理

 

 

图1-3:非对称加密登录流程

  1. 远程 Server 收到 Client 端用户 TopGun 的登录请求,Server 把自己的公钥发给用户。
  2. Client 使用这个公钥,将密码进行加密。
  3. Client 将加密的密码发送给 Server端。
  4. 远程 Server 用自己的私钥,解密登录密码,然后验证其合法性。
  5. 若验证结果,给 Client 相应的响应。
私钥是 Server 端独有,这就保证了 Client 的登录信息即使在网络传输过程中被窃据,也没有私钥进行解密,保证了数据的安全性,这充分利用了非对称加密的特性。

这样就一定安全了吗?

上述流程会有一个问题:Client 端如何保证接受到的公钥就是目标 Server 端的?

如果一个攻击者中途拦截 Client 的登录请求,向其发送自己的公钥,Client 端用攻击者的公钥进行数据加密。攻击者接收到加密信息后再用自己的私钥进行解密,不就窃取了 Client 的登录信息了吗?这就是所谓的中间人攻击。

 

图解 SSH 原理

 

 

图1-4:中间人攻击

2.1 SSH 中是如何解决这个问题的?

2.1.1 基于口令的认证

 

从上面的描述可以看出,问题就在于如何对 Server 的公钥进行认证?在 https中可以通过 CA 来进行公证,可是 SSH 的 Publish key和 Private key 都是自己生成的,没法公证。

只能通过 Client 端自己对公钥进行确认。通常在第一次登录的时候,系统会出现下面提示信息:

The 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 后,会出现下面信息:

Warning: Permanently added 'ssh-server.example.com,12.18.429.21' (RSA) to the list of known hosts.

Password: (enter password)

该 host 已被确认,并被追加到文件 known_hosts 中,然后就需要输入密码,之后的流程就按照图 1-3 进行。

2.1.2 基于公钥认证

 

在上面介绍的登录流程中可以发现,每次登录都需要输入密码,很麻烦。SSH 提供了另外一种可以免去输入密码过程的登录方式:公钥登录。流程如下:

 

图解 SSH 原理

 

 

图1-5:公钥认证流程

  1. Client 将自己的公钥存放在 Server 上,追加在文件 authorized_keys 中。注意:Client 端的 Public key 是 Client 手动 Copy 到 Server端的,SSH 建立连接过程中没有公钥的交换操作。
  2. Server 端接收到 Client 的连接请求后,会在 authorized_keys 中匹配到 Client 的公钥 pubKey,并生成随机数 R,用 Client 的公钥对该随机数进行加密得到 pubKey(R),然后将加密后信息发送给 Client。
  3. Client 端通过私钥进行解密得到随机数 R,然后对随机数 R 和本次会话的 SessionKey 利用 MD5 生成摘要 Digest1,发送给 Server 端。
  4. Server 端会也会对 R 和 SessionKey 利用同样摘要算法生成 Digest2。
  5. Server 端会最后比较 Digest1 和 Digest2 是否相同,完成认证过程。

注意:在步骤1中,Client 将自己的公钥存放在 Server 上。需要用户手动将公钥 Copy 到 Server 上。这就是在配置 SSH 的时候进程进行的操作。下图是 GitHub 上 SSH keys 设置视图:

 

 

图解 SSH 原理

 

 

GitHub 中 SSH keys 设置

在步骤 2 中,Server 端根据什么信息在 authorized_keys 中进行查找的呢?主要是根据 Client 在认证的开始会发送一个 KeyID 给 Server,这个 KeyID 会唯一对应该 Client 的一个 PublicKey,Server 就是通过该 KeyID 在 authorized_keys 进行查找对应的 PublicKey。

3. SSH 实践

3.1 生成密钥操作

经过上面的原理分析,下面三行命令的含义应该很容易理解了:

$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

ssh-keygen 是用于生产密钥的工具。

  • -t:指定生成密钥类型(rsa、dsa、ecdsa 等)
  • -P:指定 passphrase,用于确保私钥的安全
  • -f:指定存放密钥的文件(公钥文件默认和私钥同目录下,不同的是存放公钥的文件名需要加上后缀 .pub)

首先看下面 ~/.ssh 中的四个文件:

 

图解 SSH 原理

 

 

SSH 涉及文件

  1. id_rsa:保存私钥
  2. id_rsa.pub:保存公钥
  3. authorized_keys:保存已授权的客户端公钥
  4. known_hosts:保存已认证的远程主机 ID(关于 known_hosts 详情,见文末更新内容)

四个角色的关系如下图所示:

 

图解 SSH 原理

 

 

SSH 结构简图

需要注意的是:一台主机可能既是 Client,也是 Server。所以会同时拥有authorized_keys 和 known_hosts。

3.2 登录操作

# 以用户名user,登录远程主机host
$ ssh user@host
​
# 本地用户和远程用户相同,则用户名可省去
$ ssh host
​
# SSH默认端口22,可以用参数p修改端口
$ ssh -p 2017 user@host

4. 其它一些补充

 

下面关于 SSH 的 known_hosts 机制的一些补充。

4.1 known_hosts 中存储的内容是什么?

 

known_hosts 中存储是已认证的远程主机 host key,每个 SSH Server 都有一个 secret, unique ID, called a host key

4.2 host key 何时加入 known_hosts 的?

 

当我们第一次通过 SSH 登录远程主机的时候,Client 端会有如下提示:

Host key not found from the list of known hosts.
Are you sure you want to continue connecting (yes/no)?

此时,如果我们选择 yes,那么该 host key 就会被加入到 Client 的known_hosts 中,格式如下:

# domain name+encryption algorithm+host key

example.hostname.com ssh-rsa AAAAB4NzaC1yc2EAAAABIwAAAQEA...

4.3 为什么需要 known_hosts?

最后探讨下为什么需要 known_hosts,这个文件主要是通过 Client 和 Server的双向认证,从而避免中间人(man-in-the-middle attack)攻击,每次Client 向 Server 发起连接的时候,不仅仅 Server 要验证 Client 的合法性,Client 同样也需要验证 Server 的身份,SSH Client 就是通过 known_hosts 中的 host key 来验证 Server 的身份的。

这种方案足够安全吗?当然不,比如第一次连接一个未知 Server 的时候,known_hosts 还没有该 Server 的 host key,这不也可能遭到中间人攻击吗?这可能只是安全性和可操作性之间的折中吧。

5. 总结

 

本文以图文方式对 SSH 原理进行解析(主要指远程登录,没有涉及端口转发等功能)。同时分析了非对称加密的特性,以及在实践过程中如何对加密操作进行改进。



Tags:SSH   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  Tags: SSH  点击:(16)  评论:(0)  加入收藏
在本教程中,将展示如何使用Centos8的DVD镜像引导Rescue救援模式,并在救援模式中启用网络、配置SSH服务,供用户远程登录该服务器 系统环境Centos8加载ISO镜像,进入救...【详细内容】
2021-11-30  Tags: SSH  点击:(29)  评论:(0)  加入收藏
事件起因从安全分析系统里面发现一条带有病毒的下载,然后针对这条记录展开了一系列的分析分析过程1.登录到被感染服务器,查看系统状况,hadoop 这个用户在 2020/6/18 20:32 从这...【详细内容】
2021-11-23  Tags: SSH  点击:(32)  评论:(0)  加入收藏
1.背景介绍几乎每一个玩渗透的人都会接触到metasploit framework,简称msf。这是一个渗透测试框架,用ruby语言编写的,该框架集成了很多可用的exploit,比如著名的ms08_067等。你可...【详细内容】
2021-11-15  Tags: SSH  点击:(37)  评论:(0)  加入收藏
老配置文件导到新交换机上,SSH不能登陆,会提示Received disconnect from 192.168.2.163: 2: The connection is closed by SSH ServerCurrent FSM is SSH_Main_VersionMatch其...【详细内容】
2021-10-26  Tags: SSH  点击:(162)  评论:(0)  加入收藏
背景上次给大家介绍了实现基础的运维系统功能—webssh,今日书接上回,继续给大家介绍一个web远程ssh终端录像回放功能。 一、思路网上查了一下资料,搜索了一下关于实现webs...【详细内容】
2021-10-13  Tags: SSH  点击:(40)  评论:(0)  加入收藏
一、背景介绍Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework,简称叫做MSF。Metasploit作为全球最受欢迎的工具,不仅仅是因为它的方便性和强大性,更重要的...【详细内容】
2021-09-28  Tags: SSH  点击:(64)  评论:(0)  加入收藏
目的本文的目的是指导在Windows操作系统下面,如何配置通过ssh key来访问gerrit服务器。检查并生成本地的ssh key检查是否已经存在ssh key在生成本地的ssh key之前,我们需要首...【详细内容】
2021-07-23  Tags: SSH  点击:(129)  评论:(0)  加入收藏
作者:左右里编辑:釉子 据BitDefender安全研究人员称,他们发现了一个黑客组织正在以SSH暴力破解的方式攻击Linux设备,目的是在这些设备上安装门罗币恶意挖矿软件。SSH,一种为远程...【详细内容】
2021-07-22  Tags: SSH  点击:(186)  评论:(0)  加入收藏
今天在虚拟机里面安装了docker,利用docker起了一个centos。里面配置完成openssh后,利用xsheel连接docker里面的centos,发现特别慢,差不多要的1分钟才能连接上去。这肯定是有问题...【详细内容】
2021-07-21  Tags: SSH  点击:(131)  评论:(0)  加入收藏
▌简易百科推荐
今天我们来聊一下北京地区的《ICP经营许可证》有多好办,现在的互联网上提供的商机越来越多,增值电信业务十分火爆,企业通过互联网突破地域的限制,把公司产品卖到更远的地方,同时...【详细内容】
2021-12-17  梦想理应飞翔Yy    Tags:《ICP经营许可证》   点击:(12)  评论:(0)  加入收藏
转自: https://blog.kermsite.com/p/blog-intro/由于格式问题,部分链接、表格可能会失效,若失效请访问原文此专题将详细介绍如何从零开始搭建一个个人博客。Dec 01, 2021阅读时...【详细内容】
2021-12-17  LaLiLi    Tags:个人博客   点击:(7)  评论:(0)  加入收藏
SP证是第二类增值电信业务经营许可证的简称。分为全网SP证和地网SP证。申请经营许可证是在工信部申请,全网SP经营许可证的有效期是5年,全网SP许可证在工信部办理全网SP续期,地...【详细内容】
2021-11-01  s陳述    Tags:sp证书   点击:(39)  评论:(0)  加入收藏
现在还有许多人不知道EDI许可证是什么东西今天我就来给大家讲解一下.EDI许可证就是一种增值电信业务经营许可证。是针对在线数据处理和交易处理业务需求的专业资格证书。 《...【详细内容】
2021-10-28  soberXx    Tags:edi许可证   点击:(75)  评论:(0)  加入收藏
元素的化学概念,如周期表中的化学元素,一切物质都是由元素构成的。对程序员而言,网站建设制作就是代码构成网站。企业网站设计者也收集了各种各样的元素,但并非所有元素都需要运...【详细内容】
2021-10-26  南宁云尚网络    Tags:企业网站   点击:(40)  评论:(0)  加入收藏
在运营网站的过程中,有一件不可忽略的事情。那就是网站上线之前需要完成 ICP 备案。说到这里,很多朋友就提出疑问了~· 什么是 ICP 备案呢?· ICP 备案需要哪些材...【详细内容】
2021-10-22  启测云    Tags:ICP备案   点击:(46)  评论:(0)  加入收藏
最近有朋友问我,我公司有外资就不能申请ICP许可证了么?外资的定义是什么?其实是可以的,但有一个特定条件必须满足,外资公司是指公司有外资股东,比如香港、加拿大、美国、韩国等等,...【详细内容】
2021-10-21  小白速看Z    Tags:ICP   点击:(51)  评论:(0)  加入收藏
自互联网出现以来,超文本传输协议http协议被广泛用于在Web浏览器和网站服务器之间传递信息,但随着互联网的发展,另一种协议——https出现,并与http一同服务于这个互联...【详细内容】
2021-10-20  我是FEIYA    Tags:https   点击:(44)  评论:(0)  加入收藏
Grafana Loki 是一个日志聚合工具,它是功能齐全的日志堆栈的核心。图片来自 包图网先看看结果有多轻量吧: Loki 是一个为有效保存日志数据而优化的数据存储。日志数据的高效索...【详细内容】
2021-09-14    51CTO  Tags:Loki日志   点击:(97)  评论:(0)  加入收藏
背景最近做微信小程序开发比较多,大家知道线上微信小程序为了安全起见,要求后端通信协议必须是HTTPS,这就要求需要安装证书。为了测试预发布线上环境,特地买了个最便宜的域名,为...【详细内容】
2021-09-14  小李子说程序    Tags:HTTPS证书   点击:(125)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条