メインコンテンツまでスキップ

4.2. Protocol Version Exchange (プロトコルバージョン交換)

4.2. Protocol Version Exchange (プロトコルバージョン交換)

接続が確立されると, 両側は識別文字列を送信しなければならない (MUST)。この識別文字列は以下でなければならない (MUST):

SSH-protoversion-softwareversion SP comments CR LF

この一連の文書で定義されているプロトコルはバージョン 2.0 であるため, protoversion は "2.0" でなければならない (MUST)。comments 文字列はオプション (OPTIONAL) である。comments 文字列が含まれる場合, 空白文字 (上記で SP と表記, ASCII 32) が softwareversioncomments 文字列を区切らなければならない (MUST)。識別は単一のキャリッジリターン (CR) と単一のラインフィード (LF) 文字 (それぞれ ASCII 13 と 10) で終了しなければならない (MUST)。このプロトコルの古い文書化されていないバージョンとの互換性を維持したい実装者は, 本文書のセクション 5 で説明されている理由により, キャリッジリターン文字の存在を期待せずに識別文字列を処理したい場合がある。ヌル文字を送信してはならない (MUST NOT)。文字列の最大長は, キャリッジリターンとラインフィードを含めて 255 文字である。

識別文字列のキャリッジリターンとラインフィードより前の部分は, Diffie-Hellman 鍵交換で使用される (セクション 8 を参照)。

サーバーは, バージョン文字列を送信する前に他のデータ行を送信してもよい (MAY)。各行はキャリッジリターンとラインフィードで終了すべきである (SHOULD)。これらの行は "SSH-" で始まってはならず (MUST NOT), ISO-10646 UTF-8 [RFC3629] でエンコードされるべきである (SHOULD) (言語は指定されない)。クライアントはこれらの行を処理できなければならない (MUST)。これらの行は静かに無視されてもよいし (MAY), クライアントユーザーに表示されてもよい (MAY)。表示される場合, [SSH-ARCH] で議論されている制御文字フィルタリングを使用すべきである (SHOULD)。この機能の主な用途は, TCP ラッパーが切断前にエラーメッセージを表示できるようにすることである。

protoversionsoftwareversion の両方の文字列は, 空白文字とマイナス記号 (-) を除いて, 印字可能な US-ASCII 文字で構成されなければならない (MUST)。softwareversion 文字列は主に互換性拡張をトリガーし, 実装の機能を示すために使用される。comments 文字列には, ユーザーの問題解決に役立つ可能性のある追加情報を含めるべきである (SHOULD)。したがって, 有効な識別文字列の例は次のとおりである:

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

この識別文字列には, オプションの comments 文字列が含まれていないため, softwareversion 文字列の直後に CR と LF で終了している。

鍵交換は, この識別子を送信した直後に開始される。識別文字列に続くすべてのパケットは, セクション 6 で説明されているバイナリパケットプロトコルを使用しなければならない (SHALL)。