Pinentry schlägt mit gpg-agent und SSH fehl

12

Ich verwende Fedora 22. Ich versuche, GnuPG so einzurichten, dass meine SSH-Verbindungen mit meinem PGP-Authentifizierungsunterschlüssel authentifiziert werden, der sich auf meinem Yubikey Neo befindet.

Ich habe eine Systemeinheit, die den gpg-Agenten wie folgt startet:

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

Und ich habe die SSH-Unterstützung in der Konfiguration aktiviert:

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

Andere Teile des Setups umfassen das Hinzufügen des Schlüsselgriffs meines Schlüssels zur ~/.gnupg/sshcontrolDatei, das Hinzufügen meines öffentlichen Schlüssels zum Remote-Host und das Deklarieren der Umgebungsvariablen .

Wenn ich mir die verschiedenen Protokolle anschaue, die das Setup zu funktionieren scheint, sehe ich, dass SSH den Schlüssel findet, aber tatsächlich nicht damit signiert. Wenn ich mir die Protokolle von ansehe gpg-agent, kann ich feststellen, dass das pinentryProgramm nicht gestartet werden kann und daher kein PIN-Code angefordert wird:

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>

Was wir hier sehen, ist, dass in Kombination mit SSH ein ioctl-Aufruf fehlschlägt, wenn Pinentry aufgerufen wird. Wenn ich jedoch Folgendes ausführe:

$ echo "Test" | gpg2 -s

Das PIN-Fenster öffnet sich und alles funktioniert einwandfrei.

Können Sie mir helfen zu verstehen, was mit diesem Setup und SSH los ist?

Spack
quelle
Beim Versuch, die Ausgabe von taran gpg2auf Mac OS X zu leiten , trat ein ähnliches "Problem mit dem Agenten: Unangemessenes ioctl für Gerät" auf, und die Antwort von vigo löste es für mich.
Kenny Evitt

Antworten:

17

Nun, das hat bei mir funktioniert:

export GPG_TTY=`tty`

füge dies zu deinem hinzu .bashrcoder trete es einfach, bevor du gpg verwendest.

Vigo
quelle
10

Ich habe die Antwort auf der GPG-Website selbst gefunden. Der Agent konnte nicht finden, auf welchem ​​Bildschirm das Pinentry-Fenster angezeigt werden soll. Ich musste nur Folgendes in meine .*shrcAkte aufnehmen:

echo "UPDATESTARTUPTTY" | gpg-connect-agent > /dev/null 2>&1
Spack
quelle
Vielen Dank! Dies hat dazu beigetragen, das Problem zu lokalisieren (Pinentry-Fenster wird nicht angezeigt). Der obige Befehl funktioniert jedoch nicht für mich. Wenn ich es tue gpg-connect-agent, gibt es aus can't connect to the agent: IPC connect call failed. gpg-agentläuft gut und GPG_AGENT_INFOenv vars sind richtig eingerichtet.
Interessanter Zugabe export GPG_AGENT_INFOzu .bashrcFest der obigen Ausgabe mit gpg-connect-agent IPC connect call failed. Ich habe dies vorher nicht hinzugefügt, weil echo $GPG_AGENT_INFOin meiner Shell alles in Ordnung war .. aber es stellt sich heraus, dass es immer noch erforderlich ist.
1
Ich würde gerne wissen, wie viele Leute diesen Befehl kopiert haben und mich gefragt haben, warum sie eine Datei mit dem Namen "1" in ihrem Benutzerordner haben.
Kenan Sulayman
1
@ KenanSulayman guten Fang. Ich habe den Befehl korrigiert.
Spack
2
"Der Agent konnte nicht herausfinden, auf welchem ​​Bildschirm das Pinentry-Fenster angezeigt werden sollte ..." - Lol ... 1980er-Ära verzögerte Software. Kein Wunder, dass nur sehr wenige Leute GPG verwenden. Vielleicht sollte GPG die auswählen, an der ich arbeite, und keine unnötigen Fehlermeldungen mehr anzeigen.