GIT签名标签和密码短语

4

当我签署标签时,如何让git自动输入我的密码?是否有一个选项像--passphrase "我的长密码",我尝试使用ssh-keygen但没有帮助。

存储库位于本地,一切都在本地完成。

3个回答

4
正如 mipadi 所说,请求的是您的 GPG 密钥密码。您真的不希望像您所建议的那样将其放在命令行中,因为这可能会使其对其他用户可见,从而危及您的安全性。知道这一点后,gpg 和 git 的创建者不会让您像那样自毁前程。当然,这引发了一个问题,即如何以自动化方式完成此操作,以便您不必输入密码一百次。
对此非常有用的是 gpg-agent。您可能需要单独安装它(例如,在 Ubuntu 上,您需要包 gnupg-agent)。然后,请确保 ~/.gnupg/gpg.conf 包含以下行(取消注释):
use-agent

如果已经安装了gpg-agent,您的系统可能会自动调用它。如果环境变量GPG_AGENT_INFO已定义,则可以开始使用。否则,请启动代理:

eval $(gpg-agent --daemon --sh)

这是针对bash的操作;如果使用其他shell,请适当调整。

现在,当您需要解锁GPG密钥时,应该会弹出一个窗口(或其他方法),让您输入密码。一旦输入,您就不需要再次输入它,因为所有其他请求都将发送到已解锁您的密钥的代理。


我正在使用一个shell脚本来签名标签,希望密码可以自动输入。是否有一种方法或解决方案可以实现自动输入密码。 - Flan Alflani
1
你必须输入一次才能将其输入代理程序;这是无法避免的。之后,代理程序拥有解锁密钥,并且可以在不需要输入密码的情况下提供它。 - Paul Price
我认为这个答案是最好的,尽管我还没有完全让它起作用。@PaulPrice,你知道当我被要求输入密码时,为什么会出现gpg: gpg-agent is not available in this session的消息吗?我该如何强制Git使用代理?有什么想法吗? - Asbjørn Ulsberg
请确保代理已启动,并且您的 ~/.gnupg/gpg.conf 文件中已设置了 use-agentGPG_AGENT_INFO。如果遇到问题,请尝试访问 http://serverfault.com/questions/481103/gpg-agent-says-agent-exists-but-gpg-says-agent-doesnt-exist。 - Paul Price
@PaulPrice,谢谢。我已按照上面提到的一切做了,包括这个,但似乎GPG_AGENT_INFO实际上没有设置任何值。我也不太理解它应该设置为什么。 :-/ - Asbjørn Ulsberg

2

您被要求输入GPG密钥链密码,而不是SSH密码,请输入该密码。


0

如果有人感兴趣的话,我找到了解决我的问题的方法。

1.创建新的 /usr/bin/gpg-with-passphrase 文件,并使用以下内容填充:

/usr/bin/gpg   --passphrase "My Really Long passphrase"  --batch --no-tty "$@"

2.使新的 /usr/bin/gpg-with-passphrase 可执行

chmod 755 /usr/bin/gpg-with-passphrase

3. 将此选项添加到 git 配置中

git config gpg.program "/usr/bin/gpg-with-passphrase"

使用 "--global" 来设置全局

这样我就不必每次签署标签时都输入我的长密码。


1
所以,看起来 gpg 确实允许你自己给自己惹麻烦。不过他们在 manpage 中添加了这个注释:"显然,在多用户系统上,这是非常有问题的安全性。如果可以避免,请不要使用此选项。" - Paul Price
为了安全使用 $@,请记得用双引号括起来:"$@" - kevinarpe
1
如果你将口令以明文存储在你的脚本里,那么就没有设置口令的意义了。 - Tgr
echo "test" | gpg-with-passphrase --clearsig 仍然需要输入密码,Git 也是如此 :( - Vitaly Zdanevich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接