如何在 运行 "lein deploy clojars" 时修复 "gpg: decryption failed: secret key not available"?

How to fix "gpg: decryption failed: secret key not available" when running "lein deploy clojars"?

多年来,我一直在尝试将库部署到 clojars,而无需使用 lein deploy 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 (:signing {:gpg-key "<key>"}) 中同时指定 0486A2C50617110A,但没有任何区别。

我还确保 use-agent~/.gnupg/gpg.conf 中取消注释,并且我还确保 gpg-agent 安装在我的机器上 (brew 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 上使用 gpg 1.4.20 和 gpg-agent 2.0.29(均使用 brew 安装)。

我错过了什么!?

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

我的经验是,将要部署的 jar 文件命名为末尾 -SNAPSHOT 意味着您不必设置 public/private 密钥。

我通过从 brew (brew uninstall gpg) 卸载 gpg 然后从 gpgtools 安装二进制文件解决了这个问题。然后我打开终端并创建了一个从 gpg2 到 gpg 的符号 link:

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

然后我将/usr/local/MacGPG2/bin添加到我的~/.profile中的PATH。当 运行 lein clojars deploy 我现在得到一个图形用户界面,我在其中输入密码,然后它成功地签署了版本并发布了工件。