Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止git在签名提交期间请求GnuPG密码_Git_Github_Gnupg - Fatal编程技术网

防止git在签名提交期间请求GnuPG密码

防止git在签名提交期间请求GnuPG密码,git,github,gnupg,Git,Github,Gnupg,Git总是要求我输入密码短语,以便在使用签名进行提交时解锁我的密钥 git commit -S -m 'message' 我如何将密码存储在缓存中,这样我就不必在每次签名提交时都输入密码了Git永远不会获得GnuPG密码短语。您必须依赖GnuPG缓存密码短语的功能,这是通过gpg agent实现的,可以通过编辑~/.GnuPG/gpg agent.conf(隐藏在Windows中的AppData文件夹中)轻松设置 将defaultcache ttl设置为每次调用GnuPG后缓存密码短语的秒数m

Git总是要求我输入密码短语,以便在使用签名进行提交时解锁我的密钥

git commit -S -m 'message'

我如何将密码存储在缓存中,这样我就不必在每次签名提交时都输入密码了

Git永远不会获得GnuPG密码短语。您必须依赖GnuPG缓存密码短语的功能,这是通过
gpg agent
实现的,可以通过编辑
~/.GnuPG/gpg agent.conf
(隐藏在Windows中的
AppData
文件夹中)轻松设置

defaultcache ttl
设置为每次调用GnuPG后缓存密码短语的秒数
maximum cache ttl
设置初始输入密码短语后清除缓存的时间。确保未设置签名的
忽略缓存
——否则GnuPG将忽略签名操作的缓存

如果要在没有任何用户交互的情况下签署提交,可以通过
gpg预设密码短语
(通常隐藏在
/usr/lib/gnupg2/gpg预设密码短语
等位置)预填充缓存;或者通过运行任意解密或签名操作。您还可以将git配置为使用像
--passphrase[your passphrase]
这样的选项来传递给
gpg
,但请仔细阅读此方法的限制和安全含义(它涉及将您的密码短语以明文形式存储在某处)


完整的选项列表是。

更新到Ubuntu 18.04后,我以前的所有解决方案都不再有效,因为
gnome keyring
不再实现GPG代理,我无法让
GPG代理
缓存任何密码短语

以下是最终对我有效的解决方案:

创建不带tty的脚本
gpg

#/bin/bash
echo$(秘密工具查找gpgpassphrase$GPGKEY)|/usr/bin/gpg--批处理\
--无tty--pinentry模式环回--密码短语fd 0“$@”
在gnome密钥环中为$GPGKEY设置您的密码短语:

secret tool store--label='GPG Key的密码短语'gpgpgpassphrase$GPGKEY

告诉git在不使用tty的情况下使用
gpg
脚本:

git config——不带tty的全局gpg.program/path/to/gpg

您可能还必须将
允许环回pinentry
设置添加到
~/.gnupg/gpg agent.conf

更新:虽然这在本地起作用,但结果证明它不知怎么搞砸了签名:它用完整的40个字符的指纹对提交进行了签名。GitHub无法识别这些签名是否有效。当我查看更新到18.04之前签署的旧提交时(
git log--show signature
),它们不再显示为有效。我最终删除了git配置中的
gpg.program
设置。事实证明,我遇到的问题可能与最初的设置有关(我过去用它来解决不同的问题)


因此,简而言之,在更新后,运行
git config--global--unset gpg.program
是我的问题的答案。

您可以设置
gpg代理
,配置
default cache ttl
选项以及
max cache ttl
来缓存密码。我正在寻找一种使用git的方法。就像git密码缓存一样。我没有
~/.gnupg/gpg agent.conf
,而是
~/.gnupg/gpg.conf
,在其中设置
默认缓存ttl
可以吗?不,这些选项是针对
gpg agent.conf
的。您是否安装了
gpg代理
哪个gpg代理
应该列出条目)?否则,只需创建一个新文件并设置这些选项。是的,我已经安装了gpg代理,但它不工作,既不在gpg-agent.conf文件中,也不在gpg.conf文件中。顺便问一下,我使用的是Ubuntu gnome 16.04,你确定这个方法对它有效吗?是的,应该有效。如果您将git配置为使用GnuPG 2(
gpg2
),可能效果会更好。几天前就有一个问题。仅供参考,Fedora的gpg预设密码短语位于
/usr/libexec/gpg预设密码短语下