简介
ssh通过创建安全隧道来实现ssh客户端与服务器之间的连接,
它的主要用途是连接远程服务器然后在上面执行指令。
协议
ssh协议主要由三部分组成:
- 传输层协议:主要负责认证服务器、加密数据、确保数据完整性
- 用户身份验证协议:负责认证使用者是否是ssh服务器的用户
- 连接协议:将加密的信息通道改成若干个逻辑通道
传输层协议
今天主要讲一下传输层协议。
建立连接
sever收到来自client发送过来的请求后,先进行三次握手,建立tcp连接,下面给出我使用wireshark抓到的包
算法协商、版本协商
双方发送自己所支持的版本号以及算法,协商确定版本及算法,若成功则继续,否则断开连接
**交换
client根据server发送过来的数据生成一对**,将公钥发送给server
其中有一个e字段,这个就是client所生成的公钥
server也会生成一对**,并且将自己的公钥与client发送过来的公钥一起生成共享**,并且会将自己的临时公钥以及host-key,还有server会收集双方的临时公钥、共享**、host-key再加上一定的数据例如:server和client的版本字符串,对这些数据使用之前它们协商好的哈希算法计算其哈希值,然后使用自己的私钥对其签名生成signature,然后将这些值一起发送给client
client收到后会通过host-key先验证服务器的身份,然后将其保存到本地文件夹中,再使用server发送过来的临时公钥生成共享**,再加密签名,将其结果与自己所计算的哈希值进行比较,验证数据时没有问题的,这样的话整个**协商环节就结束了。
一旦建立了加密传输层并且验证了server的身份,client就必须进行身份验证,主要有两种方式:
- 密码身份验证:主要就是加密密码进行传输
- **对认证:客户端生成**对然后将公钥发送给server,server将其存储起来并生成对应的id,将id返回给client,之后client则可以通过id进行验证server是否存在自己的公钥,进而验证身份。
总结
我通过wireshark可以很好的看到**协商具体过程的数据,让我更好的去理解这个过程,但是我的目的是去提取过程中的数据,到目前还没有找到相应的解决办法。