Encontrei a resposta no Site do GPG . O agente não estava conseguindo encontrar em qual tela exibir a janela Pinentry. Eu só tive que colocar o seguinte no meu arquivo .*shrc
:
echo "UPDATESTARTUPTTY" | gpg-connect-agent > /dev/null 2>&1
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 em meu Yubikey Neo.
Eu tenho uma unidade systemd iniciando o gpg-agent da seguinte forma:
/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 configuração incluem a adição do keygrip da minha chave para o arquivo ~/.gnupg/sshcontrol
, adicionando minha chave pública ao host remoto e declarando as variáveis de ambiente .
Olhando globalmente para os vários logs que a configuração parece funcionar, vejo que o SSH encontra a chave, mas na verdade não está conseguindo assinar com ela. Se eu observar os registros de gpg-agent
, posso ver que ele não está iniciando o programa pinentry
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 o SSH, algumas chamadas ioctl estão falhando ao chamar o 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 o SSH?
Encontrei a resposta no Site do GPG . O agente não estava conseguindo encontrar em qual tela exibir a janela Pinentry. Eu só tive que colocar o seguinte no meu arquivo .*shrc
:
echo "UPDATESTARTUPTTY" | gpg-connect-agent > /dev/null 2>&1
Bem, isso funcionou para mim:
export GPG_TTY='tty'
adicione isso ao seu .bashrc
ou apenas chute-o antes de usar o gpg.