ssh原理和使用——会话建立阶段

作者: 郭子渝 分类: 红帽认证 发布时间: 2020-04-12 05:56 本文共2008个字,阅读需要6分钟。

阅读本文需要有密码学的基础,了解什么是非对称加密算法和CA,如果你只是单纯想了解如何使用,不想了解理论知识,可以直接拉到最下面直接操作

什么是SSH?

SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

他类似于微软的远程桌面连接RDP协议,在ssh之前,我们使用telnet进行远程,这种通信方法将所有通信信息包括密码直接明文传输,网络中任何一个节点都可以截获,十分的不安全,ssh第一步建立加密连接,第二步进行用户合法性和密码有效性校验,第三步返回登陆结果。如下图所示

ssh原理和使用——会话建立阶段-郭子渝的博客

以下是wireshark第一阶段的抓包结果

ssh原理和使用——会话建立阶段-郭子渝的博客

序号115和134是当你敲入ssh username@host的时候,客户端向服务器发送连接请求,告诉服务器客户端的支持的版本号,服务端也告诉客户端自己支持的版本号,现在一般支持ssh v2

序号136-137是ssh各种算法(加密,校验,压缩等)交换的过程。

客户端将自己的SSH协议版本发送到服务器,格式为: SSH-protoversion(版本号)-softwareversion(自定义) SP(空格一个,可选) comments(注释,可选) CR(回车符) LF(换行符)

这一步其实没什么高大上的内容,就是发送一个格式为 SSH-protoversion-softwareversion SP comments CR LF 的字节流而已。如图

ssh原理和使用——会话建立阶段-郭子渝的博客

140和142这两个包是通过DH算法协商出一个对称加密密钥,关于密码学的详情请点击超链接查看

如果你是第一次登陆这台主机,那么你的终端将会出现如下提示:

ssh原理和使用——会话建立阶段-郭子渝的博客

这一步操作中,客户端会检查自己的~/.ssh/known_hosts文件,检查看看这台主机的公钥有没有在这个文件中,以防止中间人攻击,ssh是一个安全的协议,不仅服务器要通过后续的认证阶段(如用户名和密码)校验客户端的合法性,客户端也同样要在此时校验服务端是否合法。

譬如你网恋后第一次去找你女朋友,但是有个绿茶伪装成你女朋友,你可以通过你女朋友的指纹验证这个人到底是不是你女朋友。

在https中,我们的公私钥都有可信CA进行签证,但是ssh协议证书大部分是自己签发的,所以ssh协议没法验证这个公钥是不是合法的,ssh解决这个问题的方式简单粗暴,把公钥进行hash后显示给用户,由用户决定是否信任这个机器。

这下可好,ssh不背锅,这要是找错女朋友得自己哭啊!

那么,怎么获得这台主机的指纹呢,如果你是BAT购买的云服务,你可以用他们的web控制台登陆vnc,如果你是自己的服务器,请使用本地控制台,然后执行以下命令,说白了就是你必须得直接接触到一次服务器,如果接触不到,请自行评估是否信任该指纹。

我们可以使用以下方法计算主机指纹,计算指纹的原因是因为指纹比公钥短,方便比较

第一种办法:本地ssh(简单粗暴)

利用vnc或者本地控制台登陆后执行:

[root@aliyun ssh]# ssh 127.0.0.1
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:Jth+Qaf1YaS7qVdR/jWaonH43Qwdh9HIAPtt24Blnac.
Are you sure you want to continue connecting (yes/no)?

是的,ssh协议是可以远程自己的,当你远程自己的时候他同样会检查known_hosts,如果不存在,那就是个灵魂拷问:你相信自己嘛!

开个玩笑,此时,指纹就显示出来了Jth+Qaf1YaS7qVdR/jWaonH43Qwdh9HIAPtt24Blnac

ssh原理和使用——会话建立阶段-郭子渝的博客
第二种办法:ssh-keygen计算指纹(了解一下原理)

主机的公钥默认存放在/etc/ssh/文件夹,通过客户端显示的结果(如图)

ssh原理和使用——会话建立阶段-郭子渝的博客

我们知道本次指纹使用ECDSA,sha256算法,我们可以对ssh_host_ecdsa_key.pub进行计算

ssh原理和使用——会话建立阶段-郭子渝的博客
[root@aliyun ssh]# ssh-keygen -lf ssh_host_ecdsa_key.pub -E sha256
  -l 进行指纹计算
  -f 指定文件
  -E 指定算法(有些客户端使用md5进行)
ssh原理和使用——会话建立阶段-郭子渝的博客

此时,我们就可以得知该主机的指纹了

现在,我们回到客户端进行比较,当两台机器显示的指纹一致的时候,我们就可以放心的敲下yes回车了,了解dh算法的朋友就知道即使公钥指纹被伪造,没有私钥,也读取不了任何加密数据。

当你敲下yes的时候,客户端会在你本地的known_hosts追加一条该主机地址和公钥的对应记录,下次就不需要人工校对了。

需要继续了解ssh可以看我下一篇博文

如果觉得我的文章对您有用,请订阅我的博客。您的支持将鼓励我继续创作!
Scroll Up