ドキュメントによると、次のカスタム設定で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 running
gpgコマンドを実行するときに使用されることがわかりました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
質問:
上記のコマンド例を実行したときにgpg-agentにカスタム設定を使用させるにはどうすればよいですか?
質問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
。