2.1.15でgpg-preset-passphraseを使用してpinentryを介して入力されたパスワードをキャッシュするにはどのような手順が必要ですか?

2.1.15でgpg-preset-passphraseを使用してpinentryを介して入力されたパスワードをキャッシュするにはどのような手順が必要ですか?

無人コンピュータで使用するパスワードをキャッシュしようとしています。これに関連するリスクがあるため、どのパスワードフレーズがキャッシュされるかを選択的に選択し、両方を設定せずに迷惑に高い値default-cache-ttlに設定せずに定期的にキャッシュ全体を消去するmax-cache-ttl必要がないようにすることをお勧めしますgpg-agent。だから解決策を探しています。gpg-preset-passphrase。トラブルシューティング中に見つかった情報の一部は以前のバージョンのGnuPGに関連しているため、すべての違いを完全に説明したかどうかはわかりません。

まず、ルールに従って.bashrcに.bashrcがありますman 1 gpg-agentexport GPG_TTY=$(tty)

eval $(gpg-agent --daemon --allow-preset-passphrase --default-cache-ttl 1 --max-cache-ttl 31536000)それでは、start gpg-agentを実行して注目しているとしましょう。gpg-preset-passphraseはまだ--max-cache-ttlに準拠しています。(デフォルトは2時間)。

$KEYGRIP次に、キーグリップを使用して必要な秘密サブキーを取得しますgpg --with-keygrip -K

それが私が試しているものです/path/to/gpg-preset-passphrase -c $KEYGRIP。 Enterキーを押すと、次のように印刷されます。

   gpg-preset-passphrase: caching passphrase failed: Not implemented

--verbose --debug 6 --log-file /path/to/gpg-agent.logもう一度追加しようとしましたが、私のgpg-agentログが追加されました。

   gpg-agent[4206] listening on socket /run/user/1000/gnupg/S.gpg-agent
   gpg-agent[4207] gpg-agent (GnuPG) 2.1.15 started
   gpg-agent[4207] handler 0x7f86ef783700 for fd 5 started
   gpg-agent[4207] command PRESET_PASSPHRASE failed: Not implemented
   gpg-agent[4207] handler 0x7f86ef783700 for fd 5 terminated

私はソースコードを掘り下げる以外にどこから始めるべきかわかりませんでした。

ベストアンサー1

標準入力でパスワードを送信したいようですgpg-preset-passphraseいいえエコーします(プロセスリストに公開されないように)。

/path/to/gpg-preset-passphrase -c $KEYGRIP <<< $PASSPHRASE

Bash以外の移植性に興味がある場合:

/path/to/gpg-preset-passphrase -c $KEYGRIP <<EOF
$PASSPHRASE
EOF

「Here Documents」構文(EOF)へのこの回答は私にとって非常に重要でした。https://unix.stackexchange.com/a/88492

また、ホームズが言及したものと同じものが必要ですallow-preset-passphrase~/.gnupg/gpg-agent.conf

対称暗号化を使用してこれを行うには(私の精神が失われたため必要ありません)、gpg-agent peopleでパスワードをプリセットするための正しいキーグリップ/キャッシュIDを見つける方法の答えを参照してください。https://superuser.com/a/1485486/1093343

おすすめ記事