Pinentry falha com gpg-agent e SSH

12

Estou executando o Fedora 22. Estou tentando configurar o GnuPG para que minhas conexões SSH sejam autenticadas usando minha subchave de autenticação PGP, localizada no meu Yubikey Neo.

Eu tenho uma unidade systemd iniciando o gpg-agent da seguinte maneira:

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

E eu habilitei o suporte SSH na configuração:

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

Outras partes da instalação incluem adicionar o keygrip da minha chave ao ~/.gnupg/sshcontrolarquivo, adicionar minha chave pública ao host remoto e declarar as variáveis ​​de ambiente .

Observando globalmente os vários logs em que a instalação parece funcionar, vejo que o SSH encontra a chave, mas na verdade não está conseguindo assinar com ela. Se eu olhar os logs de gpg-agent, posso ver que ele está falhando ao iniciar o pinentryprograma e, portanto, não está solicitando o 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>

O que vemos aqui é que, quando usado em combinação com SSH, algumas chamadas ioctl estão falhando ao chamar pinentry. No entanto, se eu executar o seguinte:

$ echo "Test" | gpg2 -s

A janela do PIN está aparecendo e tudo está funcionando bem.

Você pode me ajudar a entender o que está acontecendo com essa configuração e SSH?

Spack
fonte
Eu estava recebendo um erro semelhante "problema com o agente: ioctl inadequado para dispositivo" tentando canalizar a saída tarpara gpg2no Mac OS X e a resposta do vigo resolveu isso para mim.
Kenny Evitt 03/07

Respostas:

17

Bem, isso funcionou para mim:

export GPG_TTY=`tty`

adicione isso ao seu .bashrcou apenas chute-o antes de usar o gpg.

vigo
fonte
10

Encontrei a resposta no próprio site do GPG . O agente não conseguiu localizar em qual tela exibir a janela Pinentry. Eu apenas tive que colocar o seguinte no meu .*shrcarquivo:

echo "UPDATESTARTUPTTY" | gpg-connect-agent > /dev/null 2>&1
Spack
fonte
Obrigado! Isso ajudou a identificar o problema (a janela de pinentry não aparece). No entanto, o comando acima não funciona para mim. Se eu fizer gpg-connect-agentisso saídas can't connect to the agent: IPC connect call failed. gpg-agentestá funcionando bem e os ambientes GPG_AGENT_INFOestão configurados corretamente.
É interessante adicionar export GPG_AGENT_INFOpara .bashrccorrigir o problema acima com gpg-connect-agent IPC connect call failed. Eu não adicionei isso anteriormente porque echo $GPG_AGENT_INFOno meu shell estava bom .. mas acontece que ainda é necessário.
1
Eu adoraria saber quantas pessoas copiado este comando e perguntou por que eles tem um arquivo chamado "1" na sua pasta de usuário ..
Kenan Sulayman
1
@KenanSulayman good catch. Eu corrigi o comando.
Spack
2
"O agente não conseguiu encontrar em qual tela exibir a janela Pinentry ..." - Lol ... software retardado da era de 1980. Não é de admirar que poucas pessoas usem GPG. Talvez o GPG deva escolher aquele em que estou trabalhando e parar de fornecer mensagens de erro inúteis.