Pinentry échoue avec gpg-agent et SSH


12

J'utilise Fedora 22. J'essaie de configurer GnuPG pour que mes connexions SSH soient authentifiées à l'aide de ma sous-clé d'authentification PGP qui se trouve sur mon Yubikey Neo.

J'ai une unité systemd démarrant l'agent gpg comme suit:

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

Et j'ai activé le support SSH dans la configuration:

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

D'autres parties de la configuration incluent l'ajout de la poignée de clé de ma clé au ~/.gnupg/sshcontrolfichier, l'ajout de ma clé publique à l'hôte distant et la déclaration des variables d'environnement .

En regardant globalement les différents journaux, la configuration semble fonctionner, je peux voir que SSH trouve la clé mais ne parvient pas à signer avec. Si je regarde les journaux de gpg-agent, je peux voir qu'il ne parvient pas à lancer le pinentryprogramme et, par conséquent, ne demande pas le code 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>

Ce que nous voyons ici, c'est que lorsqu'il est utilisé en combinaison avec SSH, certains appels ioctl échouent lors de l'appel de pinentry. Cependant, si je lance ce qui suit:

$ echo "Test" | gpg2 -s

La fenêtre PIN apparaît et tout fonctionne bien.

Pouvez-vous m'aider à comprendre ce qui se passe avec cette configuration et SSH?


J'obtenais une erreur similaire de "problème avec l'agent: ioctl inapproprié pour le périphérique" en essayant de diriger la sortie de tarvers gpg2sur Mac OS X et la réponse de vigo l'a résolu pour moi.
Kenny Evitt

Réponses:


17

Eh bien, cela a fonctionné pour moi:

export GPG_TTY=`tty`

ajoutez-le à votre .bashrcou lancez-le simplement avant d'utiliser gpg.


10

J'ai trouvé la réponse sur le site Web de GPG lui-même. L'agent n'arrivait pas à trouver sur quel écran afficher la fenêtre Pinentry. Je viens de mettre les éléments suivants dans mon .*shrcdossier:

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

Je vous remercie! Cela a aidé à identifier le problème (la fenêtre de pinentry n'apparaissait pas). Cependant, la commande ci-dessus ne fonctionne pas pour moi. Si je le fais gpg-connect-agenten sortie can't connect to the agent: IPC connect call failed. gpg-agentfonctionne GPG_AGENT_INFOcorrectement et les vars env sont correctement configurés.

Ajout intéressant export GPG_AGENT_INFOpour .bashrccorriger le problème ci-dessus avec gpg-connect-agent IPC connect call failed. Je n'ai pas ajouté cela auparavant parce que echo $GPG_AGENT_INFOdans ma coquille était bien .. mais il s'avère que c'est toujours requis.

1
J'adorerais savoir combien de personnes ont copié cette commande et se demandent pourquoi elles ont un fichier appelé "1" dans leur dossier utilisateur.
Kenan Sulayman

1
@KenanSulayman bonne capture. J'ai corrigé la commande.
Spack du

2
"L'agent n'arrivait pas à trouver sur quel écran afficher la fenêtre Pinentry ..." - Lol ... 1980 logiciel retardé. Pas étonnant que très peu de gens utilisent GPG. GPG devrait peut-être choisir celui sur lequel je travaille et cesser de fournir des messages d'erreur inutiles.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.