什么正在发挥作用
我的 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
将其设置为当前环境