【发布时间】:2015-07-19 01:26:36
【问题描述】:
Leiningen 不会要求我提供密码来解密我的 gpg 密钥(其中包含我的用户名和 Datomic 密码)。
gpg --quiet --batch --decrypt ~/.lein/credentials.clj.gpg
在类似终端/ascii 的“弹出窗口”中提示输入密码(随后给我解密的密钥),然后尝试
lein deps
或
lein ring server-headless 4000
简单地说
$ lein ring server-headless 4000
Could not decrypt credentials from /home/vas/.lein/credentials.clj.gpg
gpg: cancelled by user
gpg: decryption failed: secret key not available
See `lein help gpg` for how to install gpg.
即使我从未取消或输入密码。相同的操作在我的本地机器上工作没问题,虽然它给了我一个密码的图形弹出窗口。有没有办法强制输入基于终端的密码?
我正在通过 SSH 与另一个 ubuntu 机器交谈,我想知道如何让它提示输入密码或者我可以让它工作的另一种方式。
有人有什么想法吗?
编辑:https://github.com/technomancy/leiningen/issues/615
看起来解决方案是使用钥匙串。
【问题讨论】:
-
是的,使用钥匙串可以解决这个问题。遗憾的是 lein 不能很好地与使用 gpg 的 tty 配合使用。此外,您可以通过 ssh 转发本地钥匙串(绑定到您的本地登录名)。
-
@noisesmith 您能否说明后者(通过 SSH 转发本地钥匙串)是如何可能的?我无法让钥匙串存储半持久会话。如果我理解正确,我可以执行 gpg --batch --etc... 命令并让密码短语 tty 弹出窗口询问我是否通过,然后我可以执行 lein 命令并且钥匙串应该或多或少为该操作缓存?那是我的理论,但它仍然不起作用。感谢您的回复
-
我回答了关于 gpg 的具体问题,但是考虑一下大局,最好不要在生产中使用 lein(毕竟它是一个构建和开发工具),而是使用环境变量而不是而不是服务器上的凭据文件。使用 uberjar 运行应用程序。除其他原因外,这允许更快的启动、更高的一致性以及自动化部署的能力。
-
noisesmith 你是个天才。我希望一个 repl 远程与我的数据库交谈,但该应用程序可以纯粹从 uberjar 运行......将考虑
-
您可以从 uberjar 运行 repl(通过 clojure.main 类或通过 nrepl 库)。