对于 Windows

对于 Windows

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文件放在那里,并设置您喜欢的任何值。

您可以通过运行以下命令来验证是否已完成:

  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那里查看。

答案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/"

相关内容