禁用每次提交时输入密钥短语

33

1. 概述

我无法在每次提交时禁用输入密码,该怎么做。


2. 环境

  • Windows 10 Enterprise LTSB 64位英文版,
  • git 2.16.2.windows.1,
  • gpg-agent (GnuPG) 2.2.4,
  • gpg4win 3.0.3.

3. 复现步骤

我安装并设置了Gpg4win → 我进入包含.git子文件夹的文件夹 →

  • git add .,
  • git commit -m "任何描述"

4. 预期行为

成功签名的提交,不需要输入密码。


5. 实际行为

会出现弹窗,需要输入密码:

Enter password

pinentry-qt

请输入密码以解锁OpenPGP密钥:

每次我提交代码时都需要输入我的密码;

    除去:提交之间的短暂时间。


6. 无效方法

我在USERPROFILE文件夹 - C:\Users\SashaChernykh - 中找到了.gnupg\gpg-agent.conf文件。我尝试向此文件中添加no-ttybatchno-use-agent行:

no-tty
batch
no-use-agent

我仍然遇到实际行为,而不是预期的行为。


7. 不要提供以下内容:

  1. 请不要提供我必须每次输入密码短语的选项;
  2. 或者我可以进行未签名提交的选项;
  3. 我可以在C:\Users\SashaChernykh\.gnupg\gpg-agent.conf文件中为default-cache-ttl和max-cache-ttl参数设置大值,但这不会禁用输入密码短语。

尝试使用ssh-agent http://rabexc.org/posts/using-ssh-agent 编辑:看起来你在使用Windows,可能没有帮助.. - Tobb
这是关于 GPG 而不是 SSH。 - Asfand Qazi
3个回答

45

default-cache-ttl max-cache-ttl

这样做是正确的。默认超时时间为10分钟,因此如果您的提交之间的时间超过10分钟,则需要延长时间。

C:\Users\SashaChernykh.gnupg\gpg-agent.conf

这不是正确的路径。这将是GNU/Linux系统上的路径。

在Windows上,GnuPG的主目录是%APPDATA%\gnupg

例如:

c:\Users\SashaChernykh\Appdata\Roaming\gnupg\gpg-agent.conf

修改后,您还需要重新启动gpg-agent进程。

您可以使用命令行上的gpgconf来完成此操作。

gpgconf --reload gpg-agent
使用Gpg4win更改值并检查其是否真的设置的最简单方法是使用Kleopatra:
Settings -> Configure Kleopatra -> GnuPG System -> Private Keys

在那里,您可以查看并更改以下设置:

expire cached PINs after N seconds
set maximum PIN cache lifetime to N seconds 
一些高价值。
如果您不想输入密码短语,您可以从密钥中简单地删除它。
在命令行上:
gpg --passwd <yourkeyid or email>

您可以将其留空,系统将要求您确认两次是否确实要将其留空。此后,您的密钥密码将被删除,您将不再需要再次输入密码。

您还可以从Kleopatra详细信息窗口(双击键)中选择更改密码。


Andre Heinecke,感谢您的答案。// 1. 如果我重新启动计算机,当我提交时,我需要再次输入我的密码短语吗? // 2. 我可以设置N秒。但是在N秒过去后,我需要再次输入密码短语。有没有办法,让我永远不用输入密码短语,即使N秒已经过去了?谢谢。 - Саша Черных
1
在命令行中输入"gpg --passwd <yourkeyid or email>",即可更改密语。您可以将其留空,系统会要求您再次确认是否要将其留空。 之后,您的密钥密语将被删除,您将不必再次输入密语。如果您信任本地系统/文件系统,并且始终希望解锁密钥,则此安全模型适合您。您还可以从Kleopatra的详细信息窗口(双击密钥)中选择更改密语。 - Andre Heinecke
理想情况下,它会将口令存储在 Windows 凭据管理器中,当您登录 Windows 帐户时解锁 - 这是处理此问题的正确方式,也是 GNOME 和 Mac 处理此问题的方式。让我们希望微软很快发布官方的 GPG 密钥环代理,就像他们为 SSH 所做的那样。 - Asfand Qazi
当我去找我的 gpg-agent.conf 时,发现它不存在,所以在其他搜索中,我找到了这个,与此评论相同,但展示了一个简单的图形界面方式来完成(Kleopatra),它还会为你生成 gpg-agent.conf:https://dev59.com/5lUL5IYBdhLWcg3wd3tx#66821816 - J. Scott Elblein

1

看了,谢谢。假设您正在使用Git for Windows(以前称为Git Bash) - 很抱歉,我不使用Git for Windows,我使用ConEmu中的Far模式。谢谢。 - Саша Черных
@СашаЧерных,你需要弄清楚如何在你的情况下设置环境变量。当代理启动时,变量的值将被打印出来(如果你指定了“--write-env-file”,则会写入文件)。 - kan
@kan,你的解决方案在你的环境中可行吗?“运行gpg-agent的棘手部分-在它启动后,它需要设置环境变量,以便gpg可以找到它的PID和socket。” - 我如何找出我需要设置哪个变量和值?你能给个例子吗?谢谢。 - Саша Черных

0

我认为你需要从.gnupg\gpg-agent.conf中删除batch选项和no-use-agent。然后在.gnupg\gpg.conf中添加use-agent


博士,没有改变。我的%USERPROFILE%/.gnupg/gpg.conf文件中有no-tty;我的%USERPROFILE%/.gnupg/gpg.conf文件中有use-agent。我重新启动Windows→我进行第一次提交→我输入我的密码→Enter。我进行下一次提交→我需要再次输入密码。谢谢。 - Саша Черных

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