我正在尝试将我的加密软件整合到 GnuPG,但我遇到了一个令人困惑的问题。
我的主要单位是无头服务器,我专门在 tmux 中工作。没有 X 会话,因此我已将 gpg-agent 配置为使用 pinentry-curses。我已将 gpg-agent 配置为在使用此脚本的 ssh-agent 模拟登录时调用:
if pgrep -u "${USER}" gpg-agent >/dev/null 2>&1; then
eval `cat $gnupginf`
eval `cut -d= -f1 $gnupginf | xargs echo export`
else
eval `gpg-agent -s --enable-ssh-support --daemon`
fi
Run Code Online (Sandbox Code Playgroud)
我已经将我的 ssh 密钥添加到 gpg-agent,但是当我尝试另一个 ssh 会话时,命令挂起。
我发现如果我杀死 gpg-agent 并创建一个新的登录 shell,代理会正常工作(调用 pinentry-curses 然后像 ssh-agent 一样工作)。
但是,如果我创建另一个登录 shell(例如,通过弹出打开另一个 tmux 窗格)并尝试 ssh,则命令会挂起,并且 pinentry-curses 窗口会打印在最初启动代理的登录 shell 的内容上。
此外,如果我关闭了最初启动代理的外壳,无论如何都会调用 pinentry-curses 并导致 CPU 瘫痪的无限循环。(已知错误,请参阅http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=559936。)
从本质上讲,我想知道如何更改我的设置以使 GnuPG 代理像 ssh-agent 一样无缝地工作。谢谢你的帮助!
我正在运行 Fedora 22。我正在尝试设置 GnuPG,以便使用位于 Yubikey Neo 上的 PGP 身份验证子密钥对我的 SSH 连接进行身份验证。
我有一个 systemd 单元启动 gpg-agent 如下:
/usr/bin/gpg-agent --homedir=%h/.gnupg --daemon --use-standard-socket
Run Code Online (Sandbox Code Playgroud)
我在配置中启用了 SSH 支持:
enable-ssh-support
pinentry-program /usr/bin/pinentry-gtk
Run Code Online (Sandbox Code Playgroud)
设置的其他部分包括将我的密钥的keygrip添加到~/.gnupg/sshcontrol
文件、将我的公钥添加到远程主机并声明环境变量。
全局查看设置似乎有效的各种日志,我可以看到 SSH 找到了密钥,但实际上未能使用它进行签名。如果我查看 中的日志gpg-agent
,我可以看到它无法启动该pinentry
程序,因此没有请求 PIN 码:
2015-07-22 23:23:28 gpg-agent[6758] DBG: error calling pinentry: Ioctl() inappropriate for a device <Pinentry>
2015-07-22 23:23:28 gpg-agent[6758] DBG: chan_8 -> BYE
2015-07-22 23:23:28 gpg-agent[6758] DBG: chan_7 -> CAN
2015-07-22 23:23:28 gpg-agent[6758] DBG: chan_7 <- ERR 100663573 …
Run Code Online (Sandbox Code Playgroud)