Git总是要求我在使用时签署提交时输入密码以解锁我的密钥.
git commit -S -m 'message'
Run Code Online (Sandbox Code Playgroud)
如何在缓存中存储密码,以便在签署提交时不必每次都输入密码
Jen*_*rat 14
Git永远不会掌握GnuPG密码.您必须依赖GnuPG缓存密码的功能,gpg-agent通过编辑可以轻松设置密码~/.gnupg/gpg-agent.conf(隐藏AppData在Windows文件夹中的某个位置).
设置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,但请阅读此方法的限制和安全含义(它涉及您的密码以明文存储在某处).
完整的选项列表在这里.
更新到 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 "$@"
Run Code Online (Sandbox Code Playgroud)
在 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它们不再显示为有效。我最终删除了gpg.programgit 配置中的设置。事实证明,我遇到的问题可能与最初的设置有关(我过去用它来解决另一个问题)。
所以,简而言之,跑步git config --global --unset gpg.program是我更新后问题的答案。
| 归档时间: |
|
| 查看次数: |
4330 次 |
| 最近记录: |