保留GnuPG凭据为整个用户会话缓存


53

使用GnuPG可以gpg-agent缓存对私钥的访问。如何在整个用户会话中保持该缓存处于活动状态

当我为解锁密钥时gpg-agent,它只会在有限的时间内保持缓存状态。使用SSH的代理,我输入了一次密码,并且密码在整个会话中都保持高速缓存。我希望从中获得相同的行为gpg-agent

因此,ssh-agent缓存寿命不受限制。但是gpg-agent至少在默认情况下会限制缓存的生存期。我怎样才能消除缓存时间的限制gpg-agent

Answers:


69

高达GnuPG 2

用户配置(中的~/.gnupg/gpg-agent.conf)只能定义默认和最大缓存持续时间;它不能被禁用。

default-cache-ttl选项设置上一次GnuPG活动之后的超时时间(以秒为单位)(因此,如果您使用它,它将重置),该maximum-cache-ttl选项设置输入密码后其缓存的时间跨度(以秒为单位)。的默认值为600秒(10分钟),默认值为default-cache-ttl7200秒(2小时)maximum-cache-ttl

将其设置为一年左右-例如34560000秒(400天)-您应该可以:

default-cache-ttl 34560000
maximum-cache-ttl 34560000

但是要使此更改生效,您需要通过重新启动gpg-agent结束会话。

如果要限制会话长度,则需要在注销时终止守护程序。这在操作系统之间是非常不同的,因此我指的是另一个问题/答案,其中包含针对不同系统的提示

您也可以gpg-agent在登录期间重新启动,但这并不将缓存时间限制为会话长度,而是将用户登录。确定这是否是您的问题。

GnuPG 2.1及更高版本

在GnuPG 2.1及更高版本中,该maximum-cache-ttl选项已重命名为,max-cache-ttl无需进行进一步更改。


这是“您不能做您要问的事情”的回复吗?目前尚不清楚,因为您正在谈论限制会话长度或限制缓存时间。我要正好相反:对缓存时间或会话长度没有任意限制。
bignose

那种,您只能通过设置一个相当大的ttl来解决。将其设置为一年左右,应该可以-但需要通过重新启动结束会话gpg-agent
延斯·埃拉特

请注意,在最新版本(至少gnupg 2.1)中,该maximum-cache-ttl选项不存在。要查看正确的选项,请参阅官方文档:gnupg.org/documentation/manuals/gnupg/…–
Pablo Olmos de Aguilera C.

3
至少在GnuPG 2.1中,默认default-cache-ttl值为600秒(10分钟),而不是两个小时。
jlh

@jlh查看不同版本的手册页,gpg-agent对于所有发行版,正确的值似乎是10分钟。我编辑了答案,谢谢您指出这一点。
詹斯·埃拉特

7

对于Windows

您需要编辑的文件应放在以下位置: $env:AppData\gnupg

如果在PowerShell窗口中运行它,它将打开: C:\Users\<UserName>\AppData\Roaming\gnupg

只需将gpg-agent.conf文件放置在您喜欢的任何位置即可。

您可以通过运行以下命令来验证它是否已使用:

  1. gpgconf.exe --reload gpg-agent
  2. gpgconf.exe --list-options gpg-agent

您也可以使用这种衬板: Set-Content -Path $env:AppData\gnupg\gpg-agent.conf -Value "default-cache-ttl 86400$([System.Environment]::NewLine)max-cache-ttl 86400"


如果此处的第二个答案不合适,我们可以将其移至自己的问题,并用Windows标记。不确定是对的:)
CubanX

谢谢,并将其保存在这里-很好地将所有信息都放在一个地方。👍
barfuin

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.