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?

Spack
la source
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.

vigo
la source
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
Spack
la source
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.