Mac 上的 gpg2:如何在终端上输入密码而不是获取 GUI 提示?

Mac 上的 gpg2:如何在终端上输入密码而不是获取 GUI 提示?

我正在使用 Mountain Lion,当我使用 gpg 加密文件时,烦人的 GUI 会提示我输入密码。我希望在终端中而不是在外部 GUI 中提示输入密码。例如,我可能远程执行此操作。

有没有办法让 gpg for mac 在终端中询问密码,而在 GUI 提示符中询问否?


更新:使用 gpg2 似乎很难,所以我降级到 gpg1。尝试了使用 gpg2 (MacGPG2) 的所有方法,但都不起作用。糟透了!使用 gpg1 则一切正常!

答案1

下面假设您正在使用带有 macports 的 gnupg2,而不是 MacGPG2,但修复方法可能适用于您的用例。

从 macports 安装‘pinentry’包:

port -v install pinentry

编辑您的 ~/.gnupg/gpg-agent.conf 以适应:

pinentry-program /opt/local/bin/pinentry-curses

删除或注释掉现有的“pinentry-program”条目。重新加载终端,或者使用以下命令:

echo RELOADAGENT | gpg-connect-agent

完成。您现在应该在终端(curses 对话框)中拥有 pinentry/passphrase。如果您希望拥有旧版 gpg v1.x 的 inline-ttl pinentry 行为,您可能能够使用 macports pinentry 包中的自定义“./configure”命令。

如果您之前已经为 Mac 安装了 MacGPG2 / GPG 工具,则可能需要先终止“shutdown-gpg-agent”进程,然后 pinentry 对话框才能工作(或只是重新启动)。

user$ ps ax |grep shutdown-gpg-agent
 1854   ??  S      0:00.01 /bin/bash /usr/local/MacGPG2/libexec/shutdown-gpg-agent

user$ kill -KILL 1854

答案2

ssh您可以通过检查环境变量来检查是否正在建立连接SSH_CONNECTION

export GPG_TTY=$(tty)
if [[ -n "$SSH_CONNECTION" ]] ;then
    export PINENTRY_USER_DATA="USE_CURSES=1"
fi

我使用以下检查来查看我是否正在过度运行sshtmux

export GPG_TTY=$(tty)
if [[ -n "$SSH_CONNECTION" || -n "$TMUX" ]] ;then
    export PINENTRY_USER_DATA="USE_CURSES=1"
fi

来源

答案3

三个字:自己编译。是的,你可以做到!不过,一定要先删除 gpg-agent.conf 文件!

答案4

我刚刚为 Mac OS High Sierra 编译完了 GnuPG(版本 2.2.9)及其所有依赖项。这非常有趣。在解决了 libgcrypt 测试的一个小问题后(借助 Homebrew 的相应配方),一切基本上开箱即用。

当我尝试导入我的私钥时,我做不到,因为系统缺少 pinentry 程序。快速搜索后,我找到了这个页面,但没什么帮助,所以我决定自己编译 pinentry。

从我在 Linux 机器上使用 GnuPG 的经验来看,我已经知道我想在命令行的正常提示符下输入密码,而不需要那些烦人的、令人困扰的对话框。这就是我在这里分享这个过程的原因。这很简单,但可能会对遇到类似问题的人有所帮助。

首先从 GnuPG 获取 pinentry 的源代码。检查他们的网站撰写本文时,下载源代码的链接为https://gnupg.org/ftp/gcrypt/pinentry/pinentry-1.1.0.tar.bz2。还可下载签名并使用 gpg 本身检查真实性。

不要跳过验证这个很重要!此程序将有权访问您的所有 gpg 密码和私钥。您最好确保它确实如其所声称的那样!如果您遇到问题,请确保您已从 GnuPG 维护者处导入密钥(请参阅这里):

$ gpg --verify pinentry-1.1.0.tar.bz2.sig pinentry-1.1.0.tar.bz2

现在您确定您正在使用真实的源文件,请提取源代码并cd在该目录中:

$ tar xvf pinentry-1.1.0.tar.bz2
$ cd pinentry-1.1.0

编译非常简单:

$ ./configure --enable-pinentry-tty
$ make
$ sudo make install

可能会configure抱怨缺少某些依赖项。在这种情况下,只需阅读错误并从 GnuPG 网页下载依赖项(始终检查下载的完整性!)。

上述命令中最重要的部分是标志--enable-pinentry-tty。Pinentry TTY 是在命令行中非常普通和无聊的提示中输入密码的最简单方法。正是我想要的!如果我没记错的话,curses无论如何都会构建该版本。虽然它是一个 CLI 选项,但我发现它和其他所有选项一样具有破坏性。

安装完成后,您将在 中看到一些新的二进制文件/usr/local/bin。确保您有一个名为pinentry-tty(如果没有,则说明出了问题...)。

为了使新的二进制文件成为输入 gpg 密码的默认方式,请添加以下行~/.gnupg/gpg-agent.conf(如果文件和目录尚不存在,则创建它们):

pinentry-program /usr/local/bin/pinentry-tty

如果您立即尝试,它可能不会起作用,因为您很可能仍在使用旧配置运行 gpg-agent。继续并终止所有 gpg-agent 并创建一个新的:

$ sudo killall gpg-agent
$ gpg-agent --daemon

就这样!享受老式的 TTY pinentry 吧 :)

相关内容