【问题标题】:How to fix "gpg: decryption failed: secret key not available" when running "lein deploy clojars"?运行“lein deploy clojars”时如何修复“gpg:解密失败:密钥不可用”?
【发布时间】:2016-03-13 15:43:51
【问题描述】:

多年来,我一直在尝试将库部署到 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 "&lt;key&gt;"}) 中同时指定 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 安装)。

我错过了什么!?

【问题讨论】:

  • 你能提供调用 GnuPG 的完整命令行吗? GnuPG 可以在另一个用户的上下文中运行吗? gpg --list-keys 打印公钥,解密需要秘钥。 gpg --list-secret-keys 的输出是什么?
  • 我已经更新了问题
  • lein运行时无法提示输入密码,所以需要代理。是通过同一个 TTY 提示还是通过 GUI 弹出窗口提示?
  • 终端中有一些 ascii ui 所以我想是 tty
  • 好的,如果我先执行“gpg --quiet --batch --decrypt ~/.lein/credentials.clj.gpg”然后运行“lein deploy clojars”,它似乎可以工作。但是,如果我在命令之间等待太久,它将不起作用。这是为什么!?

标签: clojure leiningen gnupg


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 当我执行“gpg --use-agent --quiet --batch --decrypt ~/.lein/credentials.clj.gpg”但是当它即将签署工件时(当我运行“lein deploy clojars”时,它显示“gpg:代理问题 - 禁用代理使用”并失败
    【解决方案3】:

    我的经验是,用-SNAPSHOT 命名要部署的 jar 文件最后意味着您不必设置公钥/私钥。

    【讨论】:

    • 是的,这也适用于我,但我想部署一个非快照版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 2022-06-14
    • 2016-06-16
    • 2018-11-06
    • 2015-04-03
    • 1970-01-01
    • 2010-09-10
    相关资源
    最近更新 更多