我正在运行Fedora22。我正在尝试设置GnuPG以使用位于Yubikey Neo上的PGP身份验证子项对SSH连接进行身份验证。
我有一个启动gpg-agent的systemd单元,如下所示:
/usr/bin/gpg-agent --homedir=%h/.gnupg --daemon --use-standard-socket
并且我在配置中启用了SSH支持:
enable-ssh-support
pinentry-program /usr/bin/pinentry-gtk
设置的其他部分包括将我的密钥的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 The IPC call was canceled <SCD>
2015-07-22 23:23:28 gpg-agent[6758] smartcard signing failed: Ioctl() inappropriate for a device
2015-07-22 23:23:28 gpg-agent[6758] ssh sign request failed: Ioctl() inappropriate for a device <Pinentry>
我们在这里看到的是,当与SSH结合使用时,调用pinentry时某些ioctl调用会失败。但是,如果我运行以下命令:
$ echo "Test" | gpg2 -s
PIN窗口将弹出,并且一切正常。
您能帮助我了解此设置和SSH发生什么情况吗?
tar
到时gpg2
,我遇到了类似的“代理问题:设备的ioctl不适当”错误,而vigo的答案为我解决了该问题。