SSH関連 (3) known_hosts

関連記事:

  1. SSH関連 - (新) 檜山正幸のキマイラ飼育記 メモ編
  2. SSH関連 (2) - (新) 檜山正幸のキマイラ飼育記 メモ編
  3. SSH関連 (3) known_hosts - (新) 檜山正幸のキマイラ飼育記 メモ編 この記事


~/.ssh/known_hosts は、クライアントして接続する先のサーバーに関する情報。物理的なテキスト1行で1エントリーになってるが、行は長くなる。Powershellからcutを使ってフィールドを表示できる。削除には ssh-keygen -R ホスト名またはIPアドレス が使える。

PS> cut '-d ' -f1 .\known_hosts
  • 第1フィールド: ホスト名またはIPアドレス、あるいは両方
  • 第2フィールド: 暗号化方式
  • 第3フィールド: 公開鍵データ、Base64エンコード、最後のイコール記号は(あれば)パディング文字

行のフォーマットは authorized_keys ファイルでも似たようなもので、暗号化方式とBase64の公開鍵データ。

sshでリモートホストに接続すると、ローカルにある known_hosts の公開鍵を使ってホスト認証をする。ただし、次の仮定がある。

  • クライアントは、接続先ホストの公開鍵をローカルの known_hosts に持っている。

これは「ニワトリ卵・問題」になる。

unknown host に接続したとき、そのリモートホストの公開鍵が送られてきても、本物かどうかの確認のしようがない。実際に使われる方法は:

  1. リモートホストが公開鍵のフィンガープリント(ハッシュ値)を送る。
  2. ユーザー(人間)が、そのフィンガープリントが目的のリモートホストの公開鍵のフィンガープリントであることを、何らかの方法で確認する。
  3. 確認が済んだら、そのリモートホストを信用する。

二番の手順を実行する手段がほとんどない。電話やメールで確認すればいいが現実的ではない。

ちなみに、フィンガープリントは ssh-keygen -l -f 秘密鍵ファイル(例: id_rsa) で取れる。