如何让 GPG Agent 缓存我的密码?

如何让 GPG Agent 缓存我的密码?

我是一名开发人员,我通常使用我的 GPG 密钥签署我的 Git 提交。我能够让 GPG 代理在 OSX 上正常工作,这样它每天只会询问我一次密码,但我在 Ubuntu 16.04 上无法让同样的事情正常工作。

以下是我正在做的事情:

  • 我已经设置了我的 GPG 密钥/等等。
  • 我在 Git 目录中。
  • 我向 Git 添加了一些文件。
  • 然后我去提交它们(git commit),并得到一个如下所示的 GPG 密码请求:

    $ git ci
    
    You need a passphrase to unlock the secret key for
    user: "Randall Degges <[email protected]>"
    4096-bit RSA key, ID 8F700DA2, created 2016-04-05
    
    [master 1740961] blah
     1 file changed, 1 insertion(+)
    

问题是:每次我提交时,系统都会再次提示我输入 GPG 密码。

我想要做的是配置 GPG 代理来缓存我的密码整整 1 天,这样只需要输入一次。

我已经阅读了大量文档和博客文章,以下是我迄今为止尝试过的……

首先,我修改了我的~/.zshrc文件(我使用 zsh)以设置以下内容:

# GPG Agent
export GPG_TTY=$(tty)
export GPGKEY=8F700DA2

现在,从我读到的内容来看,仅此一项在重新启动 gpg-agent 后就可以解决问题,但事实并非如此。

因此,我接下来要做的就是~/.gnupg/gpg-agent.conf按照页面中的说明定义一个文件man gpg-agent

# Set the default cache time to 1 day.
default-cache-ttl       86400
default-cache-ttl-ssh   86400

# Set the max cache time to 30 days.
max-cache-ttl           2592000
max-cache-ttl-ssh       2592000

这也没有任何效果。

我也尝试过各种博客方法等,但似乎都不起作用。有人能指点一下我可能遗漏了什么吗?

答案1

除了在 中设置缓存时间外gpg-agent.conf,您还必须确保 GnuPG 确实与 交互gpg-agent。GnuPG 2 及更高版本通常这样做,但 GnuPG 1 分支则不然。默认情况下,git 使用二进制文件gpg,(在撰写此答案时) 仍然是 GnuPG 1,而 GnuPG 2 安装gpg2在大多数系统上。

最后,你有两种选择:

  • 设置 git 以供使用gpg2通过改变 git 配置:

    git config --global gpg.program gpg2
    
  • 设置gpg(GnuPG 1)使用,gpg-agent方法是添加use-agentgpg.conf

答案2

除了上述答案之外,您还可以将gpg系统中的默认设置更改为gpg2而不是gpg1

如果git config --global gpg.program gpg2对你有用,但你不想将其保留在你的 git 配置中(就我而言,因为我在 macOS 上使用相同的配置),那么你可以将默认值换掉gpg

我遵循了指南这里,也就是:

$ sudo mv /usr/bin/gpg /usr/bin/gpg1
$ sudo update-alternatives --verbose --install /usr/bin/gpg gnupg /usr/bin/gpg2 50

这将生成gpg1旧的gpg二进制文件和符号链接/usr/bin/gpg -> /usr/bin/gpg2(名称为 gnupg,优先级为 50)。

理论上来说,更改默认设置gpg可能会破坏系统上的某些软件包,但 Debian Stretch(Debian 的当前稳定版本)设置gpg2为默认gpg以类似的方式,因此你不应该有太多问题。

相关内容