Pinentry falla con gpg-agent y SSH

12

Estoy ejecutando Fedora 22. Estoy tratando de configurar GnuPG para que mis conexiones SSH se autentiquen utilizando mi subclave de autenticación PGP que se encuentra en mi Yubikey Neo.

Tengo una unidad systemd que inicia el gpg-agent de la siguiente manera:

/usr/bin/gpg-agent --homedir=%h/.gnupg --daemon --use-standard-socket

Y he habilitado el soporte SSH en la configuración:

enable-ssh-support
pinentry-program /usr/bin/pinentry-gtk

Otras partes de la configuración incluyen agregar la clave de mi clave al ~/.gnupg/sshcontrolarchivo, agregar mi clave pública al host remoto y declarar las variables de entorno .

Al observar globalmente los diversos registros que la configuración parece funcionar, puedo ver que SSH encuentra la clave, pero en realidad no está firmando con ella. Si miro los registros desde gpg-agent, puedo ver que no se puede iniciar el pinentryprograma y, por lo tanto, no solicito el código 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>

Lo que vemos aquí es que cuando se usa en combinación con SSH, algunas llamadas ioctl fallan al llamar a pinentry. Sin embargo, si ejecuto lo siguiente:

$ echo "Test" | gpg2 -s

La ventana PIN aparece y todo funciona bien.

¿Me pueden ayudar a entender qué está pasando con esta configuración y SSH?

Spack
fuente
Que estaba recibiendo un "problema con el agente: ioctl inadecuados para el dispositivo" semejante error al tratar de canalizar la salida de los tarque gpg2en Mac OS X y la respuesta de Vigo resuelto por mí.
Kenny Evitt

Respuestas:

17

Bueno, esto funcionó para mí:

export GPG_TTY=`tty`

agrega esto a tu .bashrco simplemente patealo antes de usar gpg.

vigo
fuente
10

He encontrado la respuesta en el sitio web de GPG . El agente no pudo encontrar en qué pantalla mostrar la ventana de Pinentry. Solo tenía que poner lo siguiente en mi .*shrcarchivo:

echo "UPDATESTARTUPTTY" | gpg-connect-agent > /dev/null 2>&1
Spack
fuente
¡Gracias! Esto ayudó a identificar el problema (la ventana de pinentry no aparece). Sin embargo, el comando anterior no funciona para mí. Si lo hago gpg-connect-agentsalidas can't connect to the agent: IPC connect call failed. gpg-agentfunciona bien y los GPG_AGENT_INFOentornos están configurados correctamente.
Es interesante añadir export GPG_AGENT_INFOa .bashrcfijo el problema anterior con gpg-connect-agent IPC connect call failed. No agregué esto anteriormente porque echo $GPG_AGENT_INFOen mi shell estaba bien ... pero resulta que todavía es necesario.
1
Me encantaría saber cuántas personas copiaron este comando y se preguntaron por qué tienen un archivo llamado "1" en su carpeta de usuario ..
Kenan Sulayman
1
@KenanSulayman buena captura. Corregí el comando.
Spack
2
"El agente no pudo encontrar en qué pantalla mostrar la ventana de Pinentry ..." - Lol ... 1980 era un software retrasado. No es de extrañar que muy pocas personas usen GPG. Quizás GPG debería elegir el que estoy trabajando y dejar de proporcionar mensajes de error inútiles.