我是一名开发人员,我通常使用我的 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-agent
到gpg.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
以类似的方式,因此你不应该有太多问题。