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