跳到主要内容

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

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

当连接建立后, 双方必须发送标识字符串。此标识字符串必须为:

SSH-protoversion-softwareversion SP comments CR LF

由于本文档集定义的协议是版本 2.0, 因此 protoversion 必须为 "2.0"。comments 字符串是可选的。如果包含 comments 字符串, 则必须用空格字符 (上面表示为 SP, ASCII 32) 分隔 softwareversioncomments 字符串。标识必须以单个回车符 (CR) 和单个换行符 (LF) 字符 (分别为 ASCII 13 和 10) 终止。希望与此协议的旧版本 (未文档化) 保持兼容性的实现者可能希望在处理标识字符串时不期望出现回车符字符, 原因在本文档第 5 节中说明。不得发送空字符。字符串的最大长度为 255 个字符, 包括回车符和换行符。

标识字符串中回车符和换行符之前的部分在 Diffie-Hellman 密钥交换中使用 (参见第 8 节)。

服务器可以在发送版本字符串之前发送其他数据行。每行应该以回车符和换行符终止。这些行不得以 "SSH-" 开头, 并且应该以 ISO-10646 UTF-8 [RFC3629] 编码 (未指定语言)。客户端必须能够处理这些行。这些行可以被静默忽略, 或者可以显示给客户端用户。如果显示, 应该使用 [SSH-ARCH] 中讨论的控制字符过滤。此功能的主要用途是允许 TCP 包装器在断开连接之前显示错误消息。

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

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

此标识字符串不包含可选的 comments 字符串, 因此在 softwareversion 字符串之后立即以 CR 和 LF 终止。

密钥交换将在发送此标识符后立即开始。标识字符串之后的所有数据包都应使用第 6 节描述的二进制数据包协议。