web-dev-qa-db-ja.com

SSH鍵ベースの認証:known_hostsとauthorized_keys

Linuxでのsshキーの設定について読み、いくつか質問があります。私が間違っていたら訂正してください…

ホストtr-lgtoがsshを使用してホストtr-mdmに接続したいとします。それが本当のtr-mdmであることを確認したい場合は、tr-mdmで鍵のペアを生成し、公開鍵をtr-lgtoのknown_hostsに追加します。 tr-mdmが本当のtr-lgtoであることを確認したい場合、tr-lgtoは鍵ペアを生成し、公開鍵をtr-mdmのauthorized_keysに追加する必要があります。

質問1:ファイルknown_hostsにuserフィールドはなく、IPアドレスとホスト名のみです。 tr-mdmには多数のユーザーがいて、それぞれに独自の.sshフォルダーがあります。各known_hostsファイルに公開鍵を追加する必要がありますか?

質問2ssh-keyscan -t rsa tr-mdmがtr-mdmの公開鍵を返すことがわかりました。このキーが属しているユーザーを知るにはどうすればよいですか?さらに、/root/.ssh/の公開鍵は、そのコマンドが返すものとは異なります。どうすればいいの?

21
damluar

サーバーマシンの認証をクライアントマシンに、ユーザーの認証をサーバーマシンに混在させます。

サーバー認証

SSH接続が確立されているときに最初に起こることの1つは、サーバーがその公開鍵をクライアントに送信し、( 公開鍵暗号 のおかげで)クライアントが関連する秘密鍵。これにより、サーバーが認証されます。プロトコルのこの部分が成功した場合、クライアントはサーバーが本人であると偽って知っています。

クライアントは、サーバーが既知のサーバーであって、正しいサーバーとして偽装しようとしている不正なサーバーではないことを確認する場合があります。 SSHは、サーバーの正当性を検証するための単純なメカニズムのみを提供します。クライアントマシンの~/.ssh/known_hostsファイルに、すでに接続しているサーバーを記憶します(システム全体のファイル/etc/ssh/known_hostsもあります)。初めてサーバーに接続するときは、他の方法で、サーバーから提示された公開鍵が実際に接続したいサーバーの公開鍵であることを確認する必要があります。接続しようとしているサーバーの公開鍵がある場合は、クライアントの~/.ssh/known_hostsに手動で追加できます。

機密データをサーバーに送信する前に、サーバーの認証を行う必要があります。特に、ユーザー認証にパスワードが含まれる場合、そのパスワードを認証されていないサーバーに送信しないでください。

ユーザ認証

サーバーは、リモートユーザーがそのアカウントにアクセスする権限を持っていることを証明できる場合にのみ、リモートユーザーのログインを許可します。サーバーの構成とユーザーの選択に応じて、ユーザーはいくつかの形式の資格情報の1つを提示することがあります(以下のリストは完全ではありません)。

  • ユーザーは、ログインしようとしているアカウントのパスワードを提示できます。次に、サーバーはパスワードが正しいことを確認します。
  • ユーザーは公開鍵を提示し、その公開鍵に関連付けられた秘密鍵を所有していることを証明できます。これはサーバーの認証に使用される方法とまったく同じですが、ユーザーは自分の身元を証明しようとし、サーバーはそれらを検証しています。ログインの試みは、ユーザーが秘密キーを知っていて、公開キーがアカウントの認証リスト(サーバー上の~/.ssh/authorized_keys)にあることを証明した場合に受け入れられます。
  • 別のタイプの方法には、ユーザーの認証作業の一部をクライアントマシンに委任することが含まれます。これは、多くのマシンが同じアカウントを共有する企業などの制御された環境で発生します。サーバーは、逆の方法で使用されるのと同じメカニズムでクライアントマシンを認証し、クライアントに依存してユーザーを認証します。

友達が答えをくれました。デフォルトでは、keyはユーザーではなくマシンを識別します。したがって、キーは/ etc/ssh /に保存されます。 /root/.sshに保存されているものとは異なるキーを取得したのはそのためです

2
damluar