如何让 GPG 代理缓存我的密码?

rde*_*ges 31 password git gnupg

我是一名开发人员,我通常使用我的 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 <r@rdegges.com>"
    4096-bit RSA key, ID 8F700DA2, created 2016-04-05
    
    [master 1740961] blah
     1 file changed, 1 insertion(+)
    
    Run Code Online (Sandbox Code Playgroud)

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

我想要做的是配置 GPG 代理以将我的密码缓存一整天,因此只需输入一次。

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

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

# GPG Agent
export GPG_TTY=$(tty)
export GPGKEY=8F700DA2
Run Code Online (Sandbox Code Playgroud)

现在,从我读到的内容来看,在重新启动 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
Run Code Online (Sandbox Code Playgroud)

这也没有效果。

我也尝试了各种博客方法等,但似乎没有任何效果。有人可以给我一些我可能缺少的东西的指示吗?

Jen*_*rat 31

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

最后,你有两种可能:

  • 在 Ubuntu 20.04 中 `gpg --version` = `gpg (GnuPG) 2.2.19`。 (4认同)