SSH通信時に使う鍵や、鍵の配置場所などが分からなくなるので整理する!
SSH通信の3フェーズ
1.鍵交換・セッション鍵の確立
SSH接続開始時にはまず鍵交換が行われ、共通鍵(セッション鍵)が作成される。以降の各認証フェーズでの通信は、この共通鍵によって全て暗号化される。
2.ホスト認証
接続先サーバーの正当性を確認するために行われる。
ホスト認証でも公開鍵と秘密鍵のペアを使うため、公開鍵認証の鍵と混乱しないように注意!
3.ユーザー認証
接続要求をしているユーザーの正当性を確認するために行われる。
ユーザー認証の手法としてパスワード認証や公開鍵認証があり、ここでは公開鍵認証について記載する。
ホスト認証
ホスト認証(接続先サーバーの認証)について記載する。
ホスト認証用の鍵ペア
-
OSの起動時に自動生成される、サーバー側の鍵ペアを使用する。
-
一般的な配置先は以下の通り。
- 公開鍵→
/etc/ssh/ssh_host_*_key.pub
- 秘密鍵→
/etc/ssh/ssh_host_*_key
- 公開鍵→
-
クライアント側の
~/.ssh/known_hosts
に、サーバー側の公開鍵を登録する。
ホスト認証の流れ
①クライアントからサーバーにSSH接続を要求する。
②サーバーがホスト認証用の公開ホスト鍵をクライアントに送付する。
③クライアントが公開ホスト鍵を照合する。
a) 初回接続時
・サーバから受け取った公開ホスト鍵のフィンガープリントを確認し、正しければyesと入力する。これにより、クライアント側の~/.ssh/known_hosts
に公開ホスト鍵が書き込まれる。なお、事前にサーバー側の公開ホスト鍵をクライアント側に登録しておく方法もある。
b) 2回目以降
・サーバから受け取った公開ホスト鍵と~/.ssh/known_hosts
に格納された公開ホスト鍵をクライアントが比較する。一致しなかった場合は警告が表示されるため、偽ホストの可能性が高いことに気づくことができる。
④公開鍵暗号方式または署名の検証によってホスト認証を行う。
SSH v2の場合
・サーバーがホスト認証用の秘密ホスト鍵を使い、ランダムなチャレンジデータに対する署名を作成する。
・クライアントが公開ホスト鍵を使い、サーバー側が作成した署名を検証する。署名が正しい場合、ユーザー認証へ進む。
ユーザー認証
ユーザー認証のうち、公開鍵認証について記載する。
公開鍵認証用の鍵ペア
-
原則として、ユーザーが手動で作成した鍵ペアを使用する。
-
ssh-keygen
コマンドで鍵ペアを作成した場合、鍵ペアデフォルトでは~/.ssh
配下に保存される。 -
サーバー側の
~/.ssh/authorized_keys
に、クライアント側の公開鍵を登録する。
公開鍵認証の流れ
※事前準備として、クライアント側の公開ユーザー鍵をサーバー側の~/.ssh/authorized_keys
に記載しておく。
①クライアントからサーバーにSSH接続を要求する。
②サーバーがパスワード認証と公開鍵認証のどちらを使うのか判断する。~/.ssh/authorized_keys
に公開ユーザー鍵の登録があれば、公開鍵認証を試みる。
③サーバーがランダムなチャレンジデータを生成し、クライアントに送付する。
④クライアントが公開鍵認証用の秘密ユーザー鍵を使い、チャレンジデータに対する署名を作成する。
⑤サーバーが~/.ssh/authorized_keys
に登録済みの公開ユーザー鍵を使い、クライアント側が作成した署名を検証する。署名が正しい場合、ユーザーのログインを許可する。
参考