SSHデーモン(sshd)—サーバ側

SSHのクライアントプログラムであるsshおよびscpを操作する場合は、サーバであるSSHデーモンをバックグラウンドで実行し、TCP/IP port 22で接続をリスンする必要があります。このデーモンは、初回起動時に鍵のペアを3組生成します。鍵のペアはそれぞれ、秘密鍵と公開鍵で構成されます。そのため、このプロシージャは公開鍵ベースと呼ばれます。SSHを介した通信のセキュリティを保証するために、秘密鍵ファイルへのアクセスはシステム管理者に限定する必要があります。ファイルアクセス権は、デフォルトインストールにより適切に設定されます。秘密鍵はSSHデーモンでローカルにのみ必要であり、他人には付与しないでください。公開鍵コンポーネント(拡張子.pubで識別)は、接続を要求しているクライアントに送信されます。これは、ユーザ全員が読み込み可能です。

接続はSSHクライアントにより開始されます。待機中のSSHデーモンと要求側のSSHクライアントは、プロトコルとソフトウェアのバージョンを比較して不正なポートを介した接続を防止するために、識別データを交換します。オリジナルのSSHデーモンの子プロセスが要求に応答するため、同時に複数のSSH接続を確立できます。

SSHサーバとSSHクライアントとの通信の場合、OpenSSHはバージョン1および、2のSSHプロトコルをサポートします。デフォルトではバージョン2のSSHプロトコルが使用されます。バージョン 1のプロトコルを使用するには、-1スイッチを指定してこの設定を上書きします。システムのアップデート後もバージョン 1を使用するには、/usr/share/doc/packages/openssh/README.SuSEに記載されている説明に従って作業を行ってください。このドキュメントには、SSH 1環境を数ステップでSSH 2作業環境に変換する方法も含まれています。

バージョン1のSSHを使用する場合、サーバはホスト公開鍵とSSHデーモンにより1時間ごとに再生成されるサーバ鍵を送信します。この両方を使用すると、SSHクライアントは自由に選択したセッション鍵を暗号化でき、この鍵がSSHサーバに送られます。また、SSHクライアントはサーバに対して、どの暗号化方式(暗号)を使用するかも指示します。

バージョン2のSSHプロトコルはサーバ鍵を必要としません。クライアント側とサーバ側は、Diffie-Helmanのアルゴリズムを使用して鍵を交換します。

セッション鍵を復号化するにはホストとサーバの秘密鍵が不可欠であり、公開部分からは導出できません (man /usr/share/doc/packages/openssh/RFC.nroff)。この初期接続フェーズは、SSHクライアントの詳細デバッグオプション-vをオンにすると緊密に監視できます。

クライアントでは、すべてのホスト公開鍵がリモートホストとの初期接続後に~/.ssh/known_hostsに格納されます。このため、中間者攻撃、つまり、外部SSHサーバが他の名前とIPアドレスを偽装して使用しようとする攻撃が防止されます。この種の攻撃は、~/.ssh/known_hostsに含まれていないホスト鍵が使用されたことで検出されるか、適切な秘密鍵がないためにサーバがセッション鍵を復号化できないことで検出されます。

/etc/ssh/に格納された秘密鍵と公開鍵のバックアップを、外部の安全な場所に保管することをお薦めします。これにより、鍵の変更を検出でき、再インストール後は古い鍵を再び使用できます。また、ユーザの動揺を招くような警告を出す必要もなくなります。警告にも関わらず実際には正しいSSHサーバであることが確認された場合は、このシステムに関する既存のエントリを~/.ssh/known_hostsから削除する必要があります。