SSH协议介绍


整个通信过程当中,通过下面几个阶段协商实现认证链接。shell

第一阶段:

由客户端向服务器发出 TCP 链接请求。服务器

TCP 链接创建后,客户端进入等待,服务器向客户端发送第一个报文,宣告本身的版本号,包括协议版本号和软件版本号。协议版本号由主版本号和次版本号两部分组成。它和软件版本号一块儿构成形如:"SSH-<主协议版本号>.<次协议版本号>-<软件版本号>\n"的字符串。其中软件版本号字符串的最大长度为40个字节,仅供调试使用。cookie

客户端接到报文后,回送一个报文,内容也是版本号。客户端响应报文里的协议版本号这样来决定:当与客户端相比服务器的版本号较低时,若是客户端有特定的代码来模拟,则它发送较低的版本号;若是它不能,则发送本身的版本号。当与客户端相比服务器的版本号较高时,客户端发送本身的较低的版本号。按约定,若是协议改变后与之前的相兼容,主协议版本号不变;若是不相兼容,则主主协议版本号升高。session

服务器接到客户端送来的协议版本号后,把它与本身的进行比较,决定可否与客户端一块儿工做。若是不能,则断开TCP 链接;若是能,则按照二进制数据包协议发送第一个二进制数据包,双方以较低的协议版原本一块儿工做。到此为止,这两个报文只是简单的字符串,你我等凡人直接可读。ui

第二阶段:

协商解决版本问题后,双方就开始采用二进制数据包进行通信。加密

由服务器向客户端发送第一个包,内容为本身的 RSA主机密钥(host key)的公钥部分、RSA服务密钥(server key)的公钥部分、支持的加密方法、支持的认证方法、次协议版本标志、以及一个 64 位的随机数(cookie)。这个包没有加密,是明文发送的。客户端接收包后,依据这两把密钥和被称为cookie的 64 位随机数计算出会话号(session id)和用于加密的会话密钥(session key)。spa

随后客户端回送一个包给服务器,内容为选用的加密方法、cookie的拷贝、客户端次协议版本标志、以及用服务器的主机密钥的公钥部分和服务密钥的公钥部分进行加密的用于服务器计算会话密钥的32 字节随机字串。除这个用于服务器计算会话密钥的 32字节随机字串外,这个包的其余内容都没有加密。以后,双方的通信就是加密的了,服务器向客户端发第二个包(双方通信中的第一个加密的包)证明客户端的包已收到。代理

第三阶段:

双方随后进入认证阶段。能够选用的认证的方法有:调试

  1. ~/.rhosts 或 /etc/hosts.equiv 认证(缺省配置时不允许使用它);code

  2. 用 RSA 改进的 ~/.rhosts 或 /etc/hosts.equiv 认证;

  3. RSA 认证;

  4. 口令认证。

若是是使用 ~/.rhosts 或 /etc/hosts.equiv 进行认证,客户端使用的端口号必须小于1024。

认证的第一步是客户端向服务器发 SSH_CMSG_USER 包声明用户名,服务器检查该用户是否存在,肯定是否须要进行认证。若是用户存在,而且不须要认证,服务器回送一个SSH_SMSG_SUCCESS 包,认证完成。不然,服务器会送一个 SSH_SMSG_FAILURE 包,表示或是用户不存在,或是须要进行认证。注意,若是用户不存在,服务器仍然保持读取从客户端发来的任何包。除了对类型为 SSH_MSG_DISCONNECT、SSH_MSG_IGNORE 以及 SSH_MSG_DEBUG 的包外,对任何类型的包都以 SSH_SMSG_FAILURE 包。用这种方式,客户端没法肯定用户到底是否存在。

若是用户存在但须要进行认证,进入认证的第二步。客户端接到服务器发来的 SSH_SMSG_FAILURE 包后,不停地向服务器发包申请用各类不一样的方法进行认证,直到时限已到服务器关闭链接为止。时限通常设定为 5 分钟。对任何一个申请,若是服务器接受,就以 SSH_SMSG_SUCCESS 包回应;若是不接受,或者是没法识别,则以 SSH_SMSG_FAILURE 包回应。

第四阶段:

认证完成后,客户端向服务器提交会话请求。服务器则进行等待,处理客户端的请求。在这个阶段,不管什么请求只要成功处理了,服务器都向客户端回应 SSH_SMSG_SUCCESS包;不然回应 SSH_SMSG_FAILURE 包,这表示或者是服务器处理请求失败,或者是不能识别请求。会话请求分为这样几类:申请对数据传送进行压缩、申请伪终端、启动 X十一、TCP/IP 端口转发、启动认证代理、运行 shell、执行命令。到此为止,前面全部的报文都要求 IP 的服务类型(TOS)使用选项 IPTOS_THROUGHPUT。

第五阶段:

会话申请成功后,链接进入交互会话模式。在这个模式下,数据在两个方向上双向传送。此时,要求 IP 的服务类型(TOS)使用 IPTOS_LOWDELAY 选项。当服务器告知客户端本身的退出状态时,交互会话模式结束。

(注意:进入交互会话模式后,加密被关闭。在客户端向服务器发送新的会话密钥后,加密从新开始。用什么方法加密由客户端决定。)

相关文章
相关标签/搜索