GnuPG 可以使用 来gpg-agent
缓存对私钥的访问。我该如何做?在整个用户会话期间保持缓存处于活动状态?
当我解锁 的密钥时gpg-agent
,它只会在有限的时间内保持缓存。使用 SSH 的代理,我输入一次密码,它就会在整个会话期间保持缓存。我希望 有同样的行为gpg-agent
。
因此,ssh-agent
不会受到缓存生命周期限制的影响。但gpg-agent
会限制缓存生命周期,至少默认情况下是这样。我该如何消除缓存时间的限制从gpg-agent
?
答案1
用户配置(在 中~/.gnupg/gpg-agent.conf
)只能定义默认和最大缓存持续时间;它不能被禁用。
选项default-cache-ttl
设置最后一次 GnuPG 活动后的超时时间(以秒为单位)(因此如果您使用它,它将重置),选项max-cache-ttl
设置输入密码后缓存的时间跨度(以秒为单位)。默认值为 600 秒(10 分钟),default-cache-ttl
默认值为 7200 秒(2 小时)max-cache-ttl
。
将其设置为一年左右 - 比如说,34560000
秒(400 天) - 那么就没问题了:
GnuPG 2.1 及以上版本
在 GnuPG 2.1 及更高版本中,该maximum-cache-ttl
选项被重命名为,max-cache-ttl
无需进一步更改。
default-cache-ttl 34560000
max-cache-ttl 34560000
GnuPG 2 及以下版本
default-cache-ttl 34560000
maximum-cache-ttl 34560000
重启代理
但是要使此更改生效,您需要通过重新启动 gpg-agent 来结束会话。
gpgconf --kill gpg-agent
gpg-agent --daemon --use-standard-socket
如果您想限制会话长度,则需要在注销时终止守护进程。这在操作系统之间有很大不同,所以我指的是另一个包含针对不同系统的提示。
您也可以gpg-agent
在登录期间重新启动,但这不会将缓存时间限制在会话长度内,而是限制在用户登录次数内。请自行判断这是否是您遇到的问题。
答案2
对于 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
那里查看。
答案3
gpg-connect-agent reloadagent /bye
更改配置后,请确保重新加载 gpg 代理。
答案4
在 Debian 11 上没有机会
gpg-preset-passphrase:缓存密码失败:不支持
bin $ cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 11 (bullseye)" NAME="Debian GNU/Linux" VERSION_ID="11" VERSION="11 (bullseye)" VERSION_CODENAME=bullseye ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"