SSH サーバーはキーを受け入れますが、署名に失敗します

SSH サーバーはキーを受け入れますが、署名に失敗します

私は最近、標準のSSH公開鍵設定からGPGで鍵を管理する方法に移行しようとしました。説明書gpg-agent私のディストリビューションの wiki では、デフォルトの代わりにssh を使用するように設定しましたssh-agent。これでうまくいったことは間違いありません。~/.sshディレクトリを削除しても、ssh-add -lgpg で設定した 1 つのキーが表示されます。

その後、リモートの内容を~/.ssh/authorized_keysローカルの出力とまったく同じに設定しssh-add -L、デーモンを再起動しました。

現在、 を使用してリモートに接続しようとするとssh -v <myremote>、次のエラーが発生します。

...
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: (none) RSA SHA256:<myfingerprint> agent
debug1: Server accepts key: (none) RSA SHA256:<myfingerprint> agent
sign_and_send_pubkey: signing failed: agent refused operation
debug1: Trying private key: /home/zoickx/.ssh/id_rsa
debug1: Trying private key: /home/zoickx/.ssh/id_dsa
debug1: Trying private key: /home/zoickx/.ssh/id_ecdsa
debug1: Trying private key: /home/zoickx/.ssh/id_ed25519
debug1: Trying private key: /home/zoickx/.ssh/id_xmss
debug1: No more authentication methods to try.
<myremote>: Permission denied (publickey).

明らかに、サーバーは私の公開鍵が承認されていることに同意していますが、私にはよくわからない理由で、続行を拒否しています。

sign_and_send_pubkey: signing failed「 」を Google で検索すると、不足している秘密鍵を追加するか、キーファイルの権限を変更するという一般的な回答ssh-addが返ってきます。gpg-agent を使用している私のケースでは、どちらも役に立たないようです。私のキーは ssh で使用できるようですし、権限を変更するファイルもありません。

私が心配していることがいくつかあります:

  • gpgのpinentryの入力を求められることはありません
  • 公開鍵は という形式を持ちssh-rsa <key> (none)、標準の ではなく奇妙な "none" で終わりますuser@host

私のセットアップに関する追加情報:

  • 2.2.15 より
  • libgcrypt 1.8.4
  • 出力gpgconf:
gpg:OpenPGP:/usr/bin/gpg
gpg-agent:Private Keys:/usr/bin/gpg-agent
scdaemon:Smartcards:/usr/lib/gnupg/scdaemon
gpgsm:S/MIME:/usr/bin/gpgsm
dirmngr:Network:/usr/bin/dirmngr
pinentry:Passphrase Entry:/usr/bin/pinentry
  • gpgは暗号化/復号化に期待通りに機能し、pinentryも動作する
  • Gnome やその他のデスクトップ環境を実行していない - dwm を使用
  • タツノオトシゴがインストールされています

答え1

GPGパスフレーズの入力を求められないため、問題は多分実行中の gpg-agent がディスプレイ/ターミナルにアクセスできない。GPG バージョン 2.2.17 の Mac OS 10.14 (Mojave) でも同じ症状が発生しました。

gpg-agent のマニュアル ページで回避策を見つけました:

注: gpg-agent が署名要求を受信した場合、保存されているキーを復号化するために必要なパスフレーズをユーザーに要求する必要があります。ssh-agent プロトコルには、エージェントがどのディスプレイ/ターミナルで実行されているかをエージェントに伝えるメカニズムが含まれていないため、gpg-agent の ssh サポートは、gpg-agent が起動されている TTY または X ディスプレイを使用します。このディスプレイを現在のディスプレイに切り替えるには、次のコマンドを使用できます。

     gpg-connect-agent updatestartuptty /bye

永続的な解決策は見つかっていませんが、このコマンドは私にとっては有効です。再起動するたびに繰り返す必要があります。

関連情報