使用 Git 签署提交不需要我的密码

Posted

技术标签:

【中文标题】使用 Git 签署提交不需要我的密码【英文标题】:Signing commits with Git doesn't ask for my passphrase 【发布时间】:2018-09-12 19:27:53 【问题描述】:

我尝试使用命令 git commit -S 对我的提交进行签名,但它没有提示我输入 GPG 密钥的密码就失败了。

错误是:

error: gpg failed to sign the data
fatal: failed to write commit object

我注意到如果我在git commit -S 之前运行以下命令:

gpg -o /dev/null --local-user MY_KEY_ID -as <(echo 1234) && echo "The correct passphrase was entered for this key"

...一切正常,我的提交已正确签名。我认为这是因为我的密码被缓存了,但这不是我所期望的行为。

我希望 Git 会在我每次想要签署提交或标签时提示我输入密码。

在这个问题上找到了“解锁我的钥匙”的命令:How to use gpg command-line to check passphrase is correct

【问题讨论】:

【参考方案1】:

您可能需要告诉pinentry,gpg 用来提示您输入密码的软件,在哪里提示您。

export GPG_TTY=$(tty)
git commit -S

如果可行,我建议您在 shell 的“rc”文件中导出 GPG_TTY

gpg-agent documentation regarding GPG_TTY

【讨论】:

它就像一个魅力,你有一些我错过的文档吗? 编辑了我的答案以添加一些 gpg 文档。实际上,我在为我的 git 配置文件设置签名提交时遇到了同样的问题。从 git 方面似乎没有很好地记录它。 如果您通过 SSH 登录到通常通过带有 GUI 的键盘/鼠标访问的机器时遇到此错误,则此解决方案也有效 - 例如Ubuntu 桌面(在我的例子中是 20.04)。

以上是关于使用 Git 签署提交不需要我的密码的主要内容,如果未能解决你的问题,请参考以下文章

GPG 签署所有没有存储的 git 提交

Git之签署工具GPG的安装和使用

Git 签署以前的提交?

Git修改已经提交的用户名信息

git 每次提交需要输入密码

解决git每次提交、更新都需要输入账户密码