Git总是要求我在使用时签署提交时输入密码以解锁我的密钥。
2
如何在缓存中存储密码,以便我不必在签署提交时每次都输入密码
答案 0 :(得分:13)
Git永远不会掌握GnuPG密码。您必须依赖GnuPG的缓存密码的功能,这些功能通过gpg-agent
进行,可以通过编辑~/.gnupg/gpg-agent.conf
轻松设置(隐藏在Windows中AppData
文件夹中的某个位置)。< / p>
将default-cache-ttl
设置为每次调用GnuPG后缓存密码的秒数。 maximum-cache-ttl
设置最初输入密码短语后擦除缓存的时间。确保未设置ignore-cache-for-signing
- 否则GnuPG将忽略用于签名操作的缓存。
如果您想在没有任何用户互动的情况下对提交进行签名,则可以通过gpg-preset-passphrase
预填充缓存,通常隐藏在/usr/lib/gnupg2/gpg-preset-passphrase
之类的位置;或者通过运行任意解密或签名操作。您也可以将git配置为使用--passphrase [your passphrase]
之类的选项传递给gpg
,但请阅读此方法的限制和安全含义(它涉及您的密码以明文存储在某处)。 / p>
选项的完整列表是here。
答案 1 :(得分:2)
在更新到Ubuntu 18.04之后,我以前的所有解决方案都不再起作用,因为gnome-keyring
不再实现GPG代理,并且我无法获得gpg-agent
来缓存任何密码短语。
这是最终对我有用的解决方案:
创建脚本gpg-without-tty
:
#!/bin/bash
echo $(secret-tool lookup gpgpassphrase $GPGKEY) | /usr/bin/gpg --batch \
--no-tty --pinentry-mode loopback --passphrase-fd 0 "$@"
在gnome-keyring中为$ GPGKEY设置密码短语:
secret-tool store --label='Passphrase for GPG Key' gpgpassphrase $GPGKEY
告诉git使用gpg-without-tty
脚本:
git config --global gpg.program /path/to/gpg-without-tty
您可能还必须将allow-loopback-pinentry
设置添加到~/.gnupg/gpg-agent.conf
。
更新:在本地工作时,结果却以某种方式弄乱了签名:它使用完整的40个字符的指纹对提交进行签名。 GitHub无法识别这些签名为有效签名。而且,当我查看在更新为18.04(git log --show-signature
)之前签署的较早的提交时,它们不再显示为有效。我最终在git config中删除了gpg.program
设置。事实证明,我遇到的问题可能与首先设置该设置有关(我过去使用该设置来解决另一个问题)。
因此,简而言之,运行git config --global --unset gpg.program
是更新后我遇到的问题的答案。
答案 2 :(得分:0)
要存储您的 GPG 密钥密码,以便您不必在每次签署提交时都输入它,请使用以下工具:
您也可以手动配置 gpg-agent 来保存您的 GPG 密钥密码,但这不会像 ssh-agent 那样与 Mac OS Keychain 集成,并且需要更多设置。
答案 3 :(得分:-14)
如果您不想或不需要签署每次提交,您可以通过运行默认情况下关闭签名:
git config --global commit.gpgsign false
如果您想签署提交,可以使用-S标志。像这样......
git commit -S -m your commit message
让我的生活更简单!