当运行 "lein deploy clojars" 时出现 "gpg: decryption failed: secret key not available" 错误,如何修复?

3

我已经尝试很久通过lein deploy clojars命令将一个库部署到Clojars,但是不想指定用户名和密码。但最终遇到以下错误信息:

gpg: gpg-agent is not available in this session
gpg: can't query passphrase in batch mode
gpg: Invalid passphrase; please try again ...
gpg: can't query passphrase in batch mode
gpg: Invalid passphrase; please try again ...
gpg: can't query passphrase in batch mode
gpg: decryption failed: secret key not available
Could not decrypt credentials from /Users/johan/.lein/credentials.clj.gpg
nil
See `lein help gpg` for how to install gpg.
No credentials found for clojars
See `lein help deploying` for how to configure credentials to avoid prompts.

我的~./lein/credentials.clj.gpg文件看起来像这样(未加密):
{ #"https://clojars.org/repo"
 {:username "<username>" :password "<password>"}}}

我知道用户名和密码是正确的(它们只是从1password复制而来)。
运行gpg --list-keys会给我以下结果:
/Users/myname/.gnupg/pubring.gpg
-------------------------------
pub   2048R/0486A2C5 2010-10-12
uid                  My Name <myname@somemail.com>
sub   2048R/0617110A 2010-10-12

我尝试在~/.lein/profiles.clj中指定0486A2C50617110A:signing {:gpg-key "<key>"}),但没有任何区别。
我还确保了在~/.gnupg/gpg.conf中取消注释了use-agent,并且我也确保在我的机器上安装了gpg-agentbrew install gpg-agent)。 更新1 运行gpg --list-secret-keys会给我以下输出:
/Users/myname/.gnupg/secring.gpg
-------------------------------
sec   2048R/0486A2C5 2010-10-12
uid                  My Name <myname@somemail.com>
ssb   2048R/0617110A 2010-10-12

运行gpg --quiet --batch --decrypt ~/.lein/credentials.clj.gpg会提示我输入密码,然后返回解密的结果。

更新2

我在Mac OS X El Capitan上使用brew安装的gpg 1.4.20和gpg-agent 2.0.29。

我漏掉了什么吗?


你能提供调用GnuPG的完整命令行吗?GnuPG可以在另一个用户的上下文中运行吗?gpg --list-keys打印公钥,解密需要私钥。gpg --list-secret-keys的输出是什么? - Jens Erat
我已经更新了问题。 - Johan
当使用lein运行时,它无法提示输入密码,这就是为什么需要代理的原因。它是通过相同的TTY还是通过GUI弹出窗口进行提示? - noisesmith
好的,如果我先执行“gpg --quiet --batch --decrypt ~/.lein/credentials.clj.gpg”,然后再运行“lein deploy clojars”,似乎可以工作。但是如果在命令之间等待太长时间,它就无法工作。为什么会这样? - Johan
我认为这个问题的根源在于Homebrew代理想要使用stdin(它不是GUI应用程序,对吧?),而Lein无法提供stdin,因此它失败了。 - noisesmith
显示剩余3条评论
3个回答

3

我解决了这个问题,方法是先卸载brew中的gpg (brew uninstall gpg),然后从gpgtools安装二进制文件。接着,我打开终端并创建了从gpg2到gpg的符号链接:

$ ln -s /usr/local/MacGPG2/bin/gpg2 /usr/local/MacGPG2/bin/gpg

接下来,我在我的~/.profile中添加了/usr/local/MacGPG2/binPATH。当运行lein clojars deploy时,我现在会得到一个图形用户界面,在那里我输入密码后,成功地签署发布并发布了这些工件。


0
解决这个问题最简单的方法是尝试使用带有--batch标志的gpg解密文件。我认为您会发现您的代理已安装但尚未启动,或者可能配置不正确。如果您可以让gpg使用--batch工作,那么部署命令将起作用。

当我执行“gpg --use-agent --quiet --batch --decrypt ~/.lein/credentials.clj.gpg”时,它可以工作。但是当它要签署构件(当我运行“lein deploy clojars”)时,它会显示“gpg: problem with the agent - disabling agent use”,然后失败。 - Johan

0

我的经验是,给要部署的jar文件命名时,在结尾处加上-SNAPSHOT,这样就不需要设置公钥/私钥。


没错,这对我也适用,但我想部署一个非快照版本。 - Johan

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