如何在 运行 "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>"}
) 中同时指定 0486A2C5
和 0617110A
,但没有任何区别。
我还确保 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
我现在得到一个图形用户界面,我在其中输入密码,然后它成功地签署了版本并发布了工件。
多年来,我一直在尝试将库部署到 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>"}
) 中同时指定 0486A2C5
和 0617110A
,但没有任何区别。
我还确保 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
我现在得到一个图形用户界面,我在其中输入密码,然后它成功地签署了版本并发布了工件。