
私は最近、標準のSSH公開鍵設定からGPGで鍵を管理する方法に移行しようとしました。説明書gpg-agent
私のディストリビューションの wiki では、デフォルトの代わりにssh を使用するように設定しましたssh-agent
。これでうまくいったことは間違いありません。~/.ssh
ディレクトリを削除しても、ssh-add -l
gpg で設定した 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
永続的な解決策は見つかっていませんが、このコマンドは私にとっては有効です。再起動するたびに繰り返す必要があります。