暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SSH原理及运用

炎炎录 2019-08-13
432


SSH(Secure Shell 安全外壳协议)

主要部分:

一、传输层协议 [SSH-TRANS] :提供服务器认证,数据机密性,信息完整性等的支持

二、用户认证协议[SSH-USERAUTH] :则为服务器提供客户端的身份鉴别
用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。

三、连接协议 [SSH-CONNECT] :将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用;
各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。

同时SSH协议框架中还为许多高层的网络安全应用协议提供扩展的支持。

它们之间的层次关系可以用如下图来表示:


SSH协议的工作过程:

一、版本号协商阶段

       建立tcp链接,发送版本相关信息到服务器端认证,认证成功进入下一个阶段,失败则断开tcp链接。本阶段是明文模式。

二、密钥和算法协商阶段

      服务器端和客户端分别发送算法协商报文给对端,报文中包含自己支持的公钥算法列表、加密算法列表、MAC(Message Authentication Code,消息验证码)算法列表、压缩算法列表等;

      通过相关信息以及加密算法,服务器端和客户端就取得了相同的会话密钥和会话ID

     ps:在协商阶段之前,服务器端已经生成 RSA或 DSA密钥对,他们主要用于参与会话密钥的生成。

 

三、认证阶段 


 SSH提供两种认证方式:
          1. password认证
                 客户端向服务器发出 password认证请求,将用户名和密码加密后发送给服务器;
                服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败的消息。
          2. publickey 认证
                 采用数字签名的方法来认证客户端。目前,设备上可以利用RSA和 DSA两种公共密钥算法实现数字签名。客户端发送包含用户名、公共密钥和公共密钥算法的 publickey 认证请求给服务器端。
                 服务器对公钥进行合法性检查,如果不合法,则直接发送失败消息;否则,服务器利用数字签名对客户端进行认证,并返回认证成功或失败的消息

四、会话请求阶段

         1.服务器等待客户端的请求;

         2.认证通过后,客户端向服务器发送会话请求;

         3.服务器处理客户端的请求。请求被成功处理后, 服务器会向客户端回应 

五、交互会话阶段 

    1. 客户端将要执行的命令加密后传给服务器;
  2. 服务器接收到报文,解密后执行该命令,将执行的结果加密发还给客户端;
  3. 客户端将接收到的结果解密后显示到终端上.

简单总结:

Client端向Server端发起SSH连接请求。
Server端向Client端发起版本协商。
协商结束后Server端发送Host Key公钥 Server Key公钥,随机数等信息。到这里所有通信是不加密的。
Client端返回确认信息,同时附带用公钥加密过的一个随机数,用于双方计算Session Key。
进入认证阶段。从此以后所有通信均加密。
认证成功后,进入交互阶段。

加密算法

对称加密:DES、AES

非对称加密:Diffie-Hellman、RSA、 ECC

单向散列函数:MD5、SHA

加密算法涉及到的是RSA,具体加密算法不做评述。

这一块有兴趣的可以找一下《图解密码学》,或者《密码编码学与网络安全:原理与实践(第七版)(英文版)》

口令认证

远程Server收到Client端用户的登录请求,Server把自己的公钥发给用户。

Client使用这个公钥,将密码进行加密。

Client将加密的密码发送给Server端。

远程Server用自己的私钥,解密登录密码,然后验证其合法性。

若验证结果,给Client相应的响应。

缺点:

"中间人攻击"(Man-in-the-middle attack)具体过程如下图

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

通常在第一次登录的时候,系统会出现下面提示信息:

 

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

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

密钥认证

流程如下图

1、Client端用户TopGun将自己的公钥存放在Server上,追加在文件authorized_keys中。
2、Server收到登录请求后,随机生成一个字符串str1,并发送给Client。
3、Client用自己的私钥对字符串str1进行加密。
4、将加密后字符串发送给Server。
5、Server用之前存储的公钥进行解密,比较解密后的str2和str1。
6、根据比较结果,返回客户端登陆结果。

SSH实战

生成密钥操作

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
复制


复制
  • -t:指定生成密钥类型(rsa、dsa、ecdsa等)

  • -P:指定passphrase,用于确保私钥的安全

  • -f:指定存放密钥的文件(公钥文件默认和私钥同目录下,不同的是,存放公钥的文件名需要加上后缀.pub)

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


id_rsa:保存私钥
id_rsa.pub:保存公钥
authorized_keys:保存已授权的客户端公钥
known_hosts:保存已认证的远程主机公钥

文章转载自炎炎录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论