GnuPGは、gpg-agent
で秘密鍵へのアクセスをキャッシュすることができます。そのキャッシュをユーザセッション全体で有効にしておくにはどうすればいいのでしょうか?
gpg-agent
の鍵をロック解除すると、一定期間だけキャッシュされたままになります。SSH のエージェントでは、パスフレーズを一度だけ入力すると、セッション全体でキャッシュされたままになります。gpg-agent
にも同じような挙動が欲しいです
つまり、ssh-agent
はキャッシュの有効期限が制限されていることに悩まされることはありません。しかし、gpg-agent
は、少なくともデフォルトではキャッシュの有効期限を制限しています。gpg-agent
からキャッシュ時間の制限をなくすにはどうすればいいのでしょうか?
75 None 2013-07-26
GnuPG 2まで
ユーザー設定(~/.gnupg/gpg-agent.conf
の)では、デフォルトと最大のキャッシング期間のみを定義することができ、無効にすることはできません
default-cache-ttl
オプションは、最後にGnuPGを使用した後のタイムアウト時間(秒単位)を設定します(使用するとリセットされます)。デフォルト値はdefault-cache-ttl
で600秒(10分)、maximum-cache-ttl
で7200秒(2時間)です
それを1年かそこらに設定します – 例えば34560000秒(400日) – あなたは大丈夫です
default-cache-ttl 34560000
maximum-cache-ttl 34560000
しかし、この変更を有効にするためには、gpg-agentを再起動してセッションを終了する必要があります
セッションの長さに制限をかけたいのであれば、ログアウト時にデーモンを強制終了させる必要があります。これは OS によって大きく異なるので、異なるシステムのヒントを含む別の質問/回答を参照しています
ログイン中にgpg-agent
を再起動するという方法もありますが、これはキャッシュ時間をセッション長に制限するのではなく、ユーザーのログインを制限しています。これが自分の場合の問題かどうかは自分で判断してください
GnuPG 2.1以上
GnuPG 2.1 以降では、maximum-cache-ttl
オプションはそのまま max-cache-ttl
に改名されました
102 Jens Erat 2013-07-26
For Windows
編集するファイルは、以下の場所に置いてください。~\.gnupg\
これをPowerShellウィンドウで実行すると開きます。C:\Users\<UserName>\.gnupg
gpg-agent.conf
ファイルに好きな値を入れてください
実行することで確認することができます
gpgconf.exe --reload gpg-agent
gpgconf.exe --list-options gpg-agent
こちらのワンライナーも使えます。Set-Content -Path ~\.gnupg\gpg-agent.conf -Value "default-cache-ttl 86400$([System.Environment]::NewLine)max-cache-ttl 86400"
GPGの古いバージョン
古いバージョンでは、ファイルは$env:AppData\gnupg
(C:\Users\<UserName>\AppData\Roaming\gnupg
)
なので、~\.gnupg\gpg-agent.conf
で見つからない場合はそこを探してください
15 CubanX 2019-04-23
設定を変更した後、gpg-connect-agent reloadagent /bye
でgpgエージェントをリロードするようにしてください
11 SuperSandro2000 2019-05-19
あなたの問題は、パスフレーズのキャッシュ時間をより多く、あるいは無制限に必要としていることなので、gpg-preset-passphrase
を使ってgpgパスワードをキャッシュすることができ、エージェントが再起動/リロードされるまでキャッシュ時間は無制限になります。ここでドキュメントを読んでください
gpg-preset-passphrase
:
このユーティリティで設定されたパスフレーズは、–forgetオプションを使って明示的にキャッシュから消去するか、gpg-agentが再起動されるか(SIGHUPを送ることで)再ロードされない限り、有効期限が切れません。最大キャッシュ時間は –max-cache-ttl で設定されているものが優先されることに注意してください。このパスフレーズのプリセットを許可するには、–allow-preset-passphraseを指定してgpg-agentを起動する必要があります
bashでgpg-preset-passphraseユーティリティを使ってパスワードをキャッシュする方法の例
#!/bin/bash
GPG_PRESET_PASS="/usr/libexec/gpg-preset-passphrase"
KEY_GRIP=$(gpg --with-keygrip --list-secret-keys $KEY_ID | grep -Pom1 '^ *Keygrip += +\K.*')
read -s -p "[$script_name]: Enter passphrase to cache into gpg-agent: " PASSPHRASE; echo
$GPG_PRESET_PASS -c $KEY_GRIP <<< $PASSPHRASE
RETVAL=$?
if [ $RETVAL = 0 ]; then
echo "OK"
else
echo "NOT OK"
fi
1 MaXi32 2020-09-16