特定のgpgコマンドを実行した後にエージェントが自動的に起動したときにカスタム設定でgpgエージェントを実行するにはどうすればよいですか?

特定のgpgコマンドを実行した後にエージェントが自動的に起動したときにカスタム設定でgpgエージェントを実行するにはどうすればよいですか?

ドキュメントによると、次のカスタム設定でgpg-agentを実行できます。これが正式な方法だと思います。

次のgpg-agent.confには、次の内容が含まれています。

allow-preset-passphrase
default-cache-ttl 34560000
max-cache-ttl 34560000

そして、カスタム設定でgpg-agentを実行します。

#!/bin/bash
GPG_CONFIG_FILE="/opt/gpg-agent.conf"
gpg-agent --options $GPG_CONFIG_FILE --daemon

私の観察によると、gpg-agentは問題なくカスタム設定を完全に読みます。

ただし、gpg-agentを使用すると、is not runninggpgコマンドを実行するときに使用されることがわかりましたautomatically run gpg-agent。以下は、gpg-agentを呼び出して自動的に起動するコマンドの例です。

1) echo RELOADAGENT | gpg-connect-agent # Reload and forget passphrase of gpg-agent
2) KEY_GRIP=$(gpg --with-keygrip --list-secret-keys $KEY_ID | grep -Pom1 '^ *Keygrip += +\K.*') # List key grip for that key_id

問題は、上記のコマンドがカスタム設定でgpg-agentを実行しないことです。スクリプト自体のパスが存在しない場合は、事前定義された値を使用して構成が自動的に生成されるbashスクリプトを作成しています。したがって、スクリプトは ~/.gnupg ではなく、このカスタム構成のみを使用します。

$ ls
myscript.sh
conf/gpg-agent.conf

質問:

  1. 上記のコマンド例を実行したときにgpg-agentにカスタム設定を使用させるにはどうすればよいですか?

  2. 質問1)が可能でない場合は、gpg-agentが自動的に実行される上記のコマンド例を実行したときにgpg-agentが実行されないようにするにはどうすればよいですか?

答え1

すでに1年を超えました。だから問題を解決しました。問題は、--daemonここで説明されているオプションを使用するバグが原因で発生します。https://dev.gnupg.org/T5076

つまり、gpgコマンドを実行しようとしたときに既存のプロセスがすでに存在している場合、gpg-agentは他のプロセスを作成しないでください。独自のランダムプロセスを作成します。 。

--supervisedしたがって、私の場合、システムユーザーのための解決策は、gpg-agentを起動するときにこのオプションを使用する必要があるということです。このオプションは絶対に使用しないでください--daemon

詳細は:

このオプションの使用は、オプションと一緒に実行するのと同じくらい簡単ではあり--supervisedません。--daemonこのスーパーバイザモードでは、互いに通信するためにサービスファイルとソケットファイルが必要で、次のものを渡す必要がありますsystemctl。 systemdファイルは次のとおりです(このリンクでは、どのように有効にするかについて説明します)。

https://github.com/gpg/gnupg/tree/master/doc/examples/systemd-user

gpg-agent.serviceしたがって、カスタムオプションを使用するように変更してからsystemctl --user start gpg-agent。その後、すべてのgpgコマンドは新しいプロセスを作成するのではなく、このプロセスを使用します。現在実行中のプロセスIDを表示するには、gpg-agent次のようにします。

systemctl --user status gpg-agent

さて、上記は前の最初と2番目の質問に対する答えです。 2番目の問題はgpg-agentの実行を妨げませんが、追加のgpg-agentプロセスを作成しません。これは、複数のgpg-agentプロセスが実行中でパスワード検証エラーが発生したため、以前に解決しようとした問題であるためです。オプションを使用して実行してください--daemon。ここで言及したバグは、上記のgpgバグトラッカーにも記載されています。したがって、2番目の質問の目的は、各gpgコマンドがgpg-agentを自動的に起動するのを防ぎ、手動で起動できるようにすることです。ただし、optionsを使用する場合は、この方法は必要ありません--supervised

関連情報