如何获取GPG代理来缓存我的密码?


21

我是一名开发人员,通常使用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(+)
    

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

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

我已经阅读了大量的文档和博客文章,这是到目前为止我已经尝试过的内容...

首先,我修改了~/.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

这也没有效果。

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

Answers:


24

除了设置缓存时间外gpg-agent.conf,您还必须确保GnuPG确实连接了gpg-agent。通常,GnuPG 2及更高版本支持,但GnuPG 1分支则不需要。默认情况下,git使用的是gpg二进制文件(在编写此答案时)仍为GnuPG 1,而gpg2在大多数系统上都安装了GnuPG 2 。

最后,您有两种可能:

  • gpg2通过更改git配置来设置要使用的git:

    git config --global gpg.program gpg2
    
  • 设置gpg(GnuPG 1)gpg-agent通过添加use-agentgpg.conf

0

除了上述答案外,您还可以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,因此您应该不会有太多问题。

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.