我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
Run Code Online (Sandbox Code Playgroud)
每当我运行交互式 shell 时,它就会被获取。使用此设置一切正常,但存在问题。假设我:
此时gpg-agent
将开始pinentry-curses
提示密码,但它会在第一个终端中执行此操作,导致其输出与正在运行的任何内容(通常是文本编辑器)混合,无法恢复程序或停止输入(它开始使用 100% cpu我必须杀死它)。
我一定在这里做错了什么。任何人都经历过这种情况?
我发现这种情况只发生在提示解锁 SSH 密钥时,看起来像这样,而 PGP 密钥的提示总是在正确的(即当前的)tty 上打开。
meu*_*euh 15
该GPG代理手册页的选项下解释--enable-ssh-support
了SSH代理协议不能够提供TTY给代理人的姓名,所以它默认使用它在启动原来的终端。运行需要一个ssh命令之前您需要在新终端中输入密码
gpg-connect-agent updatestartuptty /bye
Run Code Online (Sandbox Code Playgroud)
在新终端中更新代理对使用哪个 tty 或显示的视图。
sma*_*kov 10
根据针对 openssh的上游错误,正确的方法是将以下内容添加到您的~/.ssh/config
:
Match host * exec "gpg-connect-agent UPDATESTARTUPTTY /bye"
Run Code Online (Sandbox Code Playgroud)
到目前为止,这对我来说非常有效。