gpg2 pinentry 在没有 X 的情况下失败

gpg2 pinentry 在没有 X 的情况下失败

什么正在发挥作用

我的 gpg-agent pinentry 在 X 下工作正常。我可以运行

echo "test" | gpg2 -ase --default-recipient-self | gpg2

缓存我的密码并稍后运行killall gpg-agent -1以刷新它们。

默认情况下,它打开 pinentry-gtk (从它的外观来看)并提示我输入密码。

什么不起作用

但是,如果我尝试在没有 X 服务器的情况下运行相同的命令,则 gpg2 似乎挂起(没有提示或任何内容)。如果我杀死它,那么我可以看到还有一个pinentry进程继续存在,但没有任何用处。

我期望发生什么

我希望在gpg2没有 X 服务器的情况下运行会给我一个 pinentry-curses 提示,就像那样pass。另外,我似乎记得旧版本的 gpg,它只是提示我从标准输入输入密码,而且我不太确定为什么这种情况不会发生。

我尝试过的

我已经尝试了以下“修复”,但没有一个能够导致上述命令正确执行。事实上,强制 pinentry-curses 会导致上述命令失败,即使在 X 环境下也是如此(pass仍然有效)。

  • pinentry-program /usr/bin/pinentry-curses在 `gpg-agent.conf` 中设置

  • 像这样启动 gpg-agent:gpg-agent --daemon --keep-tty --use-standard-socket --pinentry-program=/usr/bin/pinentry-curses

  • 使用环境变量:export PINENTRY_USER_DATA="USE_CURSES=1”

背景信息

我有一个几乎空的 .gpg-agent 配置文件;它所拥有的只是缓存超时。

我在登录时直接调用 gpg-agent,例如eval $(gpg-agent --daemon).我没有启动到 X,所以我使用 getty 登录。

答案1

哎呀...答案就在第一个屏幕的值中man gpg-agent。我需要将以下行添加到我的 ~/.bashrc 中:

GPG_TTY=$(tty)
export GPG_TTY

GPG_TTY 的错误值解释了为什么 pinentry-curses 正在运行,但没有在我需要的地方运行。

笔记:由于tty控制台登录和启动 X 服务器之间的输出发生变化,因此需要在每个 ~/.bashrc 上运行(而我的大多数导出环境变量都配置为仅在登录时运行)。

答案2

如果您经常在 X 和 tty 之间切换,您可能需要运行

gpg-connect-agent updatestartuptty /bye > /dev/null

将其设置为当前环境

相关内容