7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

環境

Ubuntu20.4

はじめに

~/.sshの中に、に、authorized_keysknown_hostsの2つのファイルが存在しています。この2つのファイルの役割について書いてみました。

因みにこの2つのファイルが保存されている場所は、~/.sshであって、ホスト認証で利用される鍵が保管されている、/etc/sshではありません。

解説

known_hostsとauthorized_keysは、共に、共通鍵が書き込まれています。秘密鍵ではありません。共にテキストファイルであるため、エディタで中身を参照することができます。1行に対し1つの公開鍵が登録されています。データが2行あれば、公開鍵が2件登録されていると判断することができます。

SSHでクライアントからサーバーに接続しにいくとき、ホスト認証と、ユーザー認証の2つの認証が行われます。ホスト認証とは、接続先が本当に正しいホストなのかを、確認するために行われる認証で、ユーザー認証とは、接続しようとしている人が、本当に、正しいユーザーなのかを確認するために行われる認証です。ホスト認証とユーザー認証は、共に、公開暗号方式で行われます。ホスト認証が先に行われ、次にユーザー認証が行われます。2つの認証が共に成功して、晴れて、SSH接続が確立されます。

SSH接続を始めて行うとき、前準備として、ssh-keygenコマンドを使って、公開鍵と秘密鍵のペア鍵を作成しますが、このときに作成する鍵は、ユーザー認証で使う鍵です。

ホスト認証で利用する鍵も、ssh-keygenコマンドで作成することはできますが、普通は作成することはありません。デフォルトでOSの中に既に入っています。大抵の場合、デフォルトで入っている鍵をそのまま使って、ホスト認証を行っています。よって、ホスト認証がどのように行われているのかは、あまり意識する必要がありませんでした。

ユーザー認証で用いられるペア鍵は、大抵、~/.sshに作りますが、ホスト認証で用いられるペア鍵は、/ect/sshの中に入っています。ホスト認証が行われるとき、サーバーは、/ect/sshの中にある公開鍵をクライアント側に送信します。送信された公開鍵は、クライアントの~/.ssh/know_hostsの中に書き込まれます。

公開鍵が書き込まれるときに、「書き込みますがよろしいですか。」といった、注意メッセージが必ず表示されます。注意メッセージが表示されるのは、始めてSSH接続が行われるときだけです。2回目以降の接続時には表示されません。ホスト認証では、~/.ssh/know_hostsに登録された公開鍵を使って暗号化を行い、サーバー側の、/ect/sshにある秘密鍵を使って復号化を行います。

ホスト認証が必要な理由は、なりすましを防止のためです。なりすましとは、自分が接続したい本当のサーバーではなく、誘導されて別のサーバーに接続してしまうことです。ホスト認証で失敗した場合、なりすましのサーバーに誘導された可能性があります。しかし、滅多にある話ではないとは思います。なりすましのサーバーには、本当のサーバーが持っている秘密鍵は持っていないため、公開鍵で暗号化したデータをなりすましサーバーの秘密鍵で復号化しようとして失敗したのです。

もし、本当のサーバーに接続したにも関わらず、ホスト認証で失敗するようなことがあれば、サーバー側でペア鍵が新しく作り変えられた可能性があります。そのようなときは、~/.ssh/know_hostsをエディタで開いて、古い公開鍵が登録されている行を1行削除して、新しい公開鍵をコピペすればOKです。ときどきありがちなトラブルシューティングの例です。

~/.ssh/know_hostsは、ホスト認証を行うために、クライアント側で作成されるのに対し、~/.ssh/authorized_keysはユーザー認証のときに作られます。ユーザー認証は、ホスト認証とは逆で、サーバー側で公開鍵を使って暗号化したデータを、クライアント側に送信し、クライアント側の秘密鍵を使って復号化する手順となります。サーバー側で保持している公開鍵を登録するファイルが、~/.ssh/authorized_keysです。

SSHサーバーは、公開鍵を登録するに従って、~/.ssh/authorized_keysのファイル容量は、どんどんと大きくなっていくが、SSHクライアントは、接続先のSSHサーバーが増えるに従い、~/.ssh/know_hostsの容量が増えていくことになります。SSHクライアントが、ローカルの~/.ssh/authorized_keysに公開鍵を追加することは、ほぼほぼないと思われます。自身の環境においても、~/.ssh/authorized_keysは、389byteであるのに対し、~/.ssh/know_hostsは1.1Kbyteあります。

まとめ

  • ~/.ssh/know_hosts
    ホスト認証で使われる公開鍵が、クライアント側で登録されています。

  • ~/.ssh/authorized_keys
    ユーザー認証で使われる公開鍵が、サーバー側で登録されています。

7
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?