跳到主要内容

4. Connection Setup (连接建立)

4. Connection Setup (连接建立)

SSH 可在任意 8 位干净且二进制透明的传输之上工作. 底层传输应该防范传输错误, 因为此类错误会导致 SSH 连接终止.

由客户端发起连接.

4.1. Use over TCP/IP (在 TCP/IP 上使用)

在 TCP/IP 上使用时, 服务器通常在端口 22 上监听连接. 该端口号已向 IANA 注册, 并正式分配给 SSH.

4.2. Protocol Version Exchange (协议版本交换)

连接建立后, 双方必须发送标识字符串 (identification string). 该标识字符串必须为:

      SSH-protoversion-softwareversion SP comments CR LF

由于本系列文档定义的协议版本为 2.0, protoversion 必须为 "2.0". comments 字符串为可选. 若包含 comments 字符串, 空格字符 (上文记为 SP, ASCII 32) 必须分隔 softwareversioncomments 字符串. 标识必须以单个回车 (CR) 与单个换行 (LF) (分别为 ASCII 13 与 10) 结束. 若希望与较旧的, 未正式成文的协议版本保持兼容, 实现者可能希望在不假定存在回车符的情况下处理标识字符串, 原因见本文档第 5 节. 不得发送空字符 (null). 字符串最大长度为 255 个字符, 含回车与换行.

标识字符串中位于回车与换行之前的部分用于 Diffie-Hellman 密钥交换 (见第 8 节).

服务器可以在发送版本字符串之前发送其他数据行. 每行应该以回车与换行结束. 此类行不得以 "SSH-" 开头, 并应该采用 ISO-10646 UTF-8 [RFC3629] 编码 (未规定语言). 客户端必须能够处理此类行. 此类行可以静默忽略, 或可向客户端用户显示. 若显示, 应该使用 [SSH-ARCH] 中讨论的控制字符过滤. 该特性的主要用途是允许 TCP wrappers 在断开前显示错误消息.

protoversionsoftwareversion 字符串必须由可打印 US-ASCII 字符组成, 空白字符与减号 (-) 除外. softwareversion 字符串主要用于触发兼容性扩展并指示实现能力. comments 字符串应该包含有助于解决用户问题的附加信息. 因此, 有效标识字符串示例为:

      SSH-2.0-billsSSH_3.6.3q3<CR><LF>

该标识字符串不包含可选的 comments 字符串, 因而在 softwareversion 字符串之后立即以 CR 与 LF 结束.

发送该标识符后将立即开始密钥交换. 标识字符串之后的所有分组必须使用二进制分组协议, 见第 6 节.