我gpg-agent
用于管理两个PGP e SSH身份。代理以这样的脚本启动
gpg_agent_env="$XDG_CACHE_HOME/gpg-agent.env"
export GPG_TTY="$(tty)"
if ! ps -U "$USER" -o ucomm | grep -q gpg-agent; then
eval "$({gpg-agent --daemon | tee $gpg_agent_env} 2> /dev/null)"
else
source "$gpg_agent_env" 2> /dev/null
fi
每当我运行交互式外壳程序时,该源代码便会提供。使用此设置,一切都可以正常工作,但是存在问题。假设我:
- 打开终端(在后台启动代理)并开始工作
- 过一会儿再打开第二个终端
- 进行需要在第二个终端输入密码的操作
此时gpg-agent
将开始pinentry-curses
提示密码,但是它将在第一个终端中执行此操作,这将导致其输出与正在运行的内容(通常是文本编辑器)混合在一起,而无法继续执行程序或停止pinentry(它开始使用100%cpu我必须杀死它)。
我一定在这里做错了。有人经历过吗?
更新:
我发现这种情况仅发生在解锁SSH密钥的提示(看起来像这样)中,而PGP密钥的提示总是在正确的(即当前)tty上打开。
您是否尝试过从登录外壳启动代理,因此仅运行一个代理?
—
jasonwryan '16
我刚刚尝试过@jasonwryan:对于Linux虚拟终端(年龄),这是相同的事情。顺便提一下,在终端问题中,我指的是终端仿真器窗口。
—
Rnhmjoj
正是
—
naisanza
export GPG_TTY="$(tty)"
为我解决的问题