cache – GnuPG の資格情報をユーザセッション全体のためにキャッシュしておく

authentication cache gnupg

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ファイルに好きな値を入れてください

実行することで確認することができます

  1. gpgconf.exe --reload gpg-agent
  2. 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


タイトルとURLをコピーしました