如何强制 GPG 使用控制台模式 pinentry 来提示输入密码?

如何强制 GPG 使用控制台模式 pinentry 来提示输入密码?

从基于控制台的环境(例如 ssh 会话)使用 gpg 会失败,因为 GTK pinentry 对话框无法显示在 SSH 会话中。

我试过了unset DISPLAY,但没用。GPG 命令行选项不包含强制 pinentry 进入控制台模式的开关。

旧版 GPG 提供了基于文本的提示,在 SSH 会话中运行良好,但升级后就失败了。

--textmode命令行开关,但显然,它做其他事情。

获取远程会话的纯文本 PIN 码输入的正确且干净的方法是什么?

答案1

在 Ubuntu 18.04 上,默认安装的是 gpg 2.2.4,

/usr/bin/pinentry
/usr/bin/pinentry-gnome3
/usr/bin/pinentry-gtk-2
/usr/bin/pinentry-x11

我可以执行以下操作来获取基于文本的 PIN 输入:

export GPG_TTY=$(tty)
gpg-connect-agent updatestartuptty /bye >/dev/null

答案2

要永久更改 pinentry,请将以下内容附加到~/.gnupg/gpg-agent.conf

pinentry-program /usr/bin/pinentry-tty

(在缺少 pinentry-tty 的旧版本中,使用 pinentry-curses 来显示“完整终端”对话窗口。)

告诉 GPG 代理重新加载配置:

gpg-connect-agent reloadagent /bye

答案3

在 Debian 盒子上:

sudo apt install pinentry-tty
sudo update-alternatives --config pinentry

(并将其设置为 pinentry-tty)

答案4

我在 Ubuntu 16.04.3 上遇到了这个问题,当时我尝试使用 gpg2 (2.1.11) 在没有密码的系统帐户上以及通过 ssh 的用户帐户上生成/安装私钥。没有任何效果,给出:

gpg:密钥 FE17AE6D/FE17AE6D:发送给代理时出错:权限被拒绝
gpg:构建 skey 数组时出错:权限被拒绝

然后我发现这对我有用,简而言之:

pico ~/.gnupg/gpg-agent.conf
# add: allow-loopback-pinentry
gpg-connect-agent reloadagent /bye
gpg2 --pinentry-mode loopback --import private.key

相关内容