Pinentry fallisce con gpg-agent e SSH


12

Sto eseguendo Fedora 22. Sto cercando di configurare GnuPG per l'autenticazione delle mie connessioni SSH usando la mia sottochiave di autenticazione PGP che si trova sul mio Yubikey Neo.

Ho un'unità systemd che avvia l'agente gpg come segue:

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

E ho abilitato il supporto SSH nella configurazione:

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

Altre parti dell'installazione includono l'aggiunta del keygrip della mia chiave al ~/.gnupg/sshcontrolfile, l'aggiunta della mia chiave pubblica all'host remoto e la dichiarazione delle variabili di ambiente .

Osservando globalmente i vari registri che l'installazione sembra funzionare, posso vedere che SSH trova la chiave ma non riesce a firmarla. Se guardo i registri da gpg-agent, vedo che non è in grado di avviare il pinentryprogramma e, quindi, non richiede il codice 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>

Quello che vediamo qui è che quando usato in combinazione con SSH, alcune chiamate ioctl falliscono quando si chiama pinentry. Tuttavia, se eseguo quanto segue:

$ echo "Test" | gpg2 -s

La finestra del PIN si sta aprendo e funziona tutto bene.

Potete aiutarmi a capire cosa sta succedendo con questa configurazione e SSH?


Stavo riscontrando un simile "problema con l'agente: ioctl inappropriato per dispositivo" che tentava di convogliare l'output di tarsu gpg2su Mac OS X e la risposta di vigo lo ha risolto per me.
Kenny Evitt,

Risposte:


17

Bene, questo ha funzionato per me:

export GPG_TTY=`tty`

aggiungilo al tuo .bashrco semplicemente calcialo prima di usare gpg.


10

Ho trovato la risposta sul sito Web GPG stesso. L'agente non è riuscito a trovare su quale schermata visualizzare la finestra Pinentry. Ho appena dovuto inserire quanto segue nel mio .*shrcfile:

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

Grazie! Ciò ha contribuito a individuare il problema (la finestra di pinentry non viene visualizzata). Tuttavia, il comando sopra non funziona per me. Se lo faccio gpg-connect-agentemette can't connect to the agent: IPC connect call failed. gpg-agentsta funzionando benissimo e tutti i GPG_AGENT_INFOvars sono impostati correttamente.

È interessante notare che l'aggiunta export GPG_AGENT_INFOdi .bashrcrisolto il problema di cui sopra gpg-connect-agent IPC connect call failed. Non l'ho aggiunto in precedenza perché echo $GPG_AGENT_INFOnella mia shell andava bene .. ma si scopre che è ancora necessario.

1
Mi piacerebbe sapere quante persone hanno copiato questo comando e mi sono chiesto perché hanno un file chiamato "1" nella loro cartella utente ..
Kenan Sulayman

1
@KenanSulayman buona cattura. Ho corretto il comando.
Spacco

2
"L'agente non è riuscito a trovare su quale schermo visualizzare la finestra Pinentry ..." - Lol ... software ritardato dell'era 1980. Nessuna meraviglia che pochissime persone usano il GPG. Forse GPG dovrebbe scegliere quello su cui sto lavorando e smettere di fornire messaggi di errore inutili.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.