SSH クライアントは SSH サーバーに公開鍵を提供しません。

SSH クライアントは SSH サーバーに公開鍵を提供しません。

Linux サーバーには root ではなく 2 人のユーザーがいます。最初のユーザーの特定のSSHサーバーへのSSH接続(キーベースの認証)を確立すると成功します。

/* debug messages removed for brevity */
debug1: Next authentication method: publickey
debug1: Offering public key: .ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 149
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
Enter passphrase for key '.ssh/id_rsa': 
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8

これで、2 番目のユーザーで指定された秘密鍵ファイルを使用しますが、鍵ベースの認証は-i .ssh/SD成功しません。この時点まで、すべてのSSHクライアントデバッグメッセージはまったく同じです。

/* debug messages removed for brevity */
debug1: Next authentication method: publickey
debug1: Trying private key: .ssh/SD
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
Enter passphrase for key '.ssh/SD': 
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.
Permission denied (publickey).

2番目のケースでは、SSHクライアントが公開鍵を提供しないのはなぜですか?これはキーベースの認証に不可欠なステップですか?

答え1

2つを確認したい。

  1. 別のSSHキーを使用しているようですので、権限が正しいことを確認してください。 .ssh フォルダーは 0700、rsa 秘密鍵は 0600、公開鍵は 0644 でなければなりません。ls -l ~/.ssh閲覧権限のため。

  2. 公開鍵が2番目のサーバーに送信されたことを確認してください。ssh-copy-id ~/.ssh/SD.pubを使用して公開鍵を2番目のサーバーにコピーできます。一度実行すると、サーバーにログインして(ルートまたはパスワードで)そのファイルが存在することを確認でき、cat ~/.ssh/authorized_keysローカルシステムに正しい出力が必要です。cat ~/.ssh/SD.pub以前に追加した場合は、追加のキーがある可能性があります。

これらの両方がうまく見えますが、まだ入力できない場合は、/var/log/secureでサーバーログを確認するか、フォアグラウンドで2番目のSSHサーバーを実行して何が起こっているかを確認できます。リモートサーバーで実行

sudo $(which sshd) -p 6666 -D -d

次に、システムで次のコマンドを使用して新しいSSHデーモンにログインします。

ssh -p 6666 -i ~/.ssh/SD <SERVER>

サーバー端末に印刷されたログ情報を表示できます。これには、ログインが失敗した理由に関する詳細情報が含まれる場合があります。

2番目のsshdデーモンの説明。セキュリティ上の理由から、権限は通常0755ですが、sudoが必要です。また、sshdバイナリへのフルパスを提供する必要があります。これが$(which sshd)コマンドに含まれる理由です。-p 6666ポートを設定します(私は任意のポートを選択しました)。デバッグが有効な-D状態でフォアグラウンドで実行されます-d

答え2

2番目のケースでは、SSHクライアントが公開鍵を提供しないのはなぜですか?

公開鍵が存在する場合は、クライアントが提供します(つまり、ファイルが存在し、秘密鍵と同じフォルダにあり、同じ名前+ ".pub"があります)。

これはキーベースの認証に不可欠なステップですか?

いいえ。公開鍵の提供はオプションです。クライアントが秘密鍵を所有していることを証明することは必須です。
より多くの説明はここで見つけることができます: https://security.stackexchange.com/a/152638

この 2 つの状況を説明するには、次のようにします。

  1. 公開鍵を提供したら、クライアントが秘密鍵を所有していることを証明してください。
debug1: Authentications that can continue: publickey,password
debug1: Offering public key: RSA SHA256:3btAL+lsfo8D3Z8PVWLG04j8BqShS2ImfxqwMFPS8BM '.ssh/id_rsa'
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 60
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug2: input_userauth_pk_ok: fp SHA256:3btAL+lsfo8D3Z8PVWLG04j8BqShS2ImfxqwMFPS8BM
debug3: sign_and_send_pubkey: RSA SHA256:3btAL+lsfo8D3Z8PVWLG04j8BqShS2ImfxqwMFPS8BM
debug3: send packet: type 50
debug3: receive packet: type 52
debug1: Authentication succeeded (publickey).
  1. クライアントが秘密鍵を持っていることだけを証明します。
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: '.ssh/id_rsa'
debug3: sign_and_send_pubkey: RSA SHA256:3btAL+lsfo8D3Z8PVWLG04j8BqShS2ImfxqwMFPS8BM
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 52
debug1: Authentication succeeded (publickey).

.ssh/SD.pub名前付き公開鍵が存在し、秘密鍵と関連がない場合.ssh/SD(たとえば、以前に生成された鍵のため)、接続は失敗します。 OPによって提供されたログによると、ここではそうではありませんが、この質問をしたときに経験した問題はまさにこれでした。この場合、クライアントのログは次のようになります(認証が失敗した理由を明確に指定しません)。

debug1: Next authentication method: publickey
debug1: Offering public key: RSA SHA256:p5eJ+CJ1aRR9xeEcQUDCkbnQ3VUxa8cxjlWUhsYfla4 '.ssh/id_rsa'
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password

関連情報