Pinentry因gpg-agent和SSH失败


12

我正在运行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发生什么情况吗?


尝试在Mac OS X上通过管道将输出连接tar到时gpg2,我遇到了类似的“代理问题:设备的ioctl不适当”错误,而vigo的答案为我解决了该问题。
肯尼·埃维特

Answers:


17

好吧,这对我有用:

export GPG_TTY=`tty`

.bashrc在使用gpg之前将其添加到您的应用中,或直接踢它。


10

我已经在GPG网站本身上找到了答案。代理无法在哪个屏幕上显示“ Pinentry”窗口。我只需要在.*shrc文件中放入以下内容:

echo "UPDATESTARTUPTTY" | gpg-connect-agent > /dev/null 2>&1

谢谢!这有助于查明问题(未显示“登录”窗口)。但是,以上命令对我不起作用。如果我这样做gpg-connect-agent输出can't connect to the agent: IPC connect call failedgpg-agent运行正常,并且环境GPG_AGENT_INFO变量设置正确。

有趣的是export GPG_AGENT_INFO,使用.bashrc修复了上述问题gpg-connect-agent IPC connect call failed。我以前没有添加它,因为echo $GPG_AGENT_INFO在我的shell中还可以。但是事实证明它仍然是必需的。

1
我很想知道有多少人复制这个命令,不知道为什么他们有一个在他们的用户文件夹名为“1”的文件..
凯南苏莱曼

1
@KenanSulayman好抓。我更正了命令。
2016年

2
“该代理未能找到在哪个屏幕上显示Pinentry窗口...” -Lol ... 1980年代受阻的软件。难怪很少有人使用GPG。也许GPG应该选择我正在研究的那个,并停止提供无用的错误消息。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.