SSH 認証はどのように機能しますか?

SSH 認証はどのように機能しますか?

私の質問は次のシナリオに基づいています: serverA、、、および。両方serverBのユーザーが両方のサーバーに存在します。user1user2

user1serverASSH キーペアが生成され、公開キーがauthorized_keysのファイルにコピーされますserverB

user2ではserverASSH キー ペアが生成されておらず、 でも生成されていませんserverB

user1にログインしますserverA。( )としてuser1SSH 接続を試みますが、パスワードは要求されず、正常に動作します。serverBuser2ssh user2@serverb

私の質問はこれです。これはどのように機能するのでしょうか?user2には公開鍵がありませんserverB。私はいつも、SSH はログインしようとしているユーザーを認証するものだと思っていました。これは、 の SSH がserverB現在ログインしているユーザーを認証するというuser1意味ですかserverA?

答え1

これはまったく正しくないようです。OpenSSH を使用していますか? それとも他の SSH 実装を使用していますか?

どのように動作するかという質問に戻ると、予想どおりです(簡略化)。

  • リモート システムに接続します。
  • ユーザー名を渡します。
  • リモート システムはユーザーが存在することを確認し、キー認証が構成されている場合はキーを要求します。
  • ユーザーのHOME/.ssh/authorized_keysが存在するかどうかを確認します
  • authorized_keys 内のエントリを 1 つずつチェックし、機能するものが見つかるか、エントリがなくなるまで続けます。
  • 一致するキーが見つかった場合、認証は成功します。

すべては、宛先ユーザーの ~.ssh/authorized_keys ファイル内のキーに基づいています。そのようなファイル/キーが存在しない場合は、何かが壊れています。

答え2

コメントで、 について言及しました.rht_authorised key

デフォルトのユーザーごとの承認キー ファイルは、ユーザーのホーム ディレクトリを参照する~/.ssh/authorized_keysである必要があります。が使用されている場合は、デフォルト以外の OpenSSH 構成が使用されていることを意味します。~.rht_authorised

/etc/ssh/sshd_configキーワードを使用して、承認されたキー ファイルの別の場所 (または複数の場所) を定義できますAuthorizedKeysFile。絶対パスとして定義され、、、などのトークンが定義に使用されていない場合は%h%uすべて%Uのユーザーが同じ承認されたキー ファイルを使用します。

新しい OpenSSH バージョンには、ユーザー認証時に公開キーの検索に使用されるプログラムまたはスクリプトを定義するキーワードもありますAuthorizedKeysCommand。これはデフォルトでは使用されませんが、一部のホスティングまたはクラウド セットアップで使用される場合があります。

何をgrep -i authorizedkeys /etc/ssh/sshd_config報告しますか?

関連情報