私の質問は次のシナリオに基づいています: serverA
、、、および。両方serverB
のユーザーが両方のサーバーに存在します。user1
user2
user1
にserverA
SSH キーペアが生成され、公開キーがauthorized_keys
のファイルにコピーされますserverB
。
user2
ではserverA
SSH キー ペアが生成されておらず、 でも生成されていませんserverB
。
user1
にログインしますserverA
。( )としてuser1
SSH 接続を試みますが、パスワードは要求されず、正常に動作します。serverB
user2
ssh 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
報告しますか?