
Recentemente, tentei migrar de uma configuração de chave pública ssh padrão para gerenciar minhas chaves com GPG. Seguindoinstruçõesno wiki da minha distribuição, configurei o ssh para usar gpg-agent
em vez do padrão ssh-agent
. Tenho certeza de que tudo correu bem: mesmo com meu ~/.ssh
diretório removido, ssh-add -l
mostra a chave que configurei para ele no gpg.
Depois disso, configurei o conteúdo do meu controle remoto ~/.ssh/authorized_keys
exatamente para a saída local ssh-add -L
e reiniciei o daemon.
Agora, tentando conectar-me ao meu controle remoto usando ssh -v <myremote>
, recebo o seguinte erro:
...
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: (none) RSA SHA256:<myfingerprint> agent
debug1: Server accepts key: (none) RSA SHA256:<myfingerprint> agent
sign_and_send_pubkey: signing failed: agent refused operation
debug1: Trying private key: /home/zoickx/.ssh/id_rsa
debug1: Trying private key: /home/zoickx/.ssh/id_dsa
debug1: Trying private key: /home/zoickx/.ssh/id_ecdsa
debug1: Trying private key: /home/zoickx/.ssh/id_ed25519
debug1: Trying private key: /home/zoickx/.ssh/id_xmss
debug1: No more authentication methods to try.
<myremote>: Permission denied (publickey).
Claramente, o servidor concorda que minha chave pública está autorizada, mas, por um motivo que não está claro para mim, recusa-se a continuar.
As respostas comuns ao pesquisar no Google " sign_and_send_pubkey: signing failed
" devem ser usadas ssh-add
para adicionar a chave privada ausente ou para alterar as permissões nos arquivos-chave. Nenhum deles parece ser útil no meu caso, usando o gpg-agent. Minha chave parece estar disponível para ssh e não há arquivos para alterar as permissões.
Algumas coisas que me preocupam:
- Eu não sou solicitado a pinentry do gpg em nenhum momento
- A chave pública tem o formato
ssh-rsa <key> (none)
, terminando com o estranho "none" em vez do padrãouser@host
.
Informações adicionais sobre minha configuração:
- gpg 2.2.15
- libgcrypt 1.8.4
- Saída de
gpgconf
:
gpg:OpenPGP:/usr/bin/gpg
gpg-agent:Private Keys:/usr/bin/gpg-agent
scdaemon:Smartcards:/usr/lib/gnupg/scdaemon
gpgsm:S/MIME:/usr/bin/gpgsm
dirmngr:Network:/usr/bin/dirmngr
pinentry:Passphrase Entry:/usr/bin/pinentry
- gpg funciona conforme esperado para criptografia/descriptografia, com pinentry funcionando
- Não executando o Gnome ou qualquer outro ambiente de desktop - usando dwm
- cavalo marinho está instalado
Responder1
Como você não está sendo solicitado a inserir sua senha GPG, o problematalvezque o gpg-agent em execução não pode acessar o display/terminal. Encontrei os mesmos sintomas no Mac OS 10.14 (Mojave) com GPG versão 2.2.17.
Encontrei uma solução alternativa na página de manual do gpg-agent:
Nota: caso o gpg-agent receba uma solicitação de assinatura, pode ser necessário que o usuário forneça uma senha, que é necessária para descriptografar a chave armazenada. Como o protocolo ssh-agent não contém um mecanismo para informar ao agente em qual display/terminal ele está sendo executado, o ssh-support do gpg-agent usará o display TTY ou X onde o gpg-agent foi iniciado. Para mudar esta exibição para a atual, o seguinte comando pode ser usado:
gpg-connect-agent updatestartuptty /bye
Embora não tenha encontrado uma solução permanente, este comando funciona para mim. Precisa ser repetido após cada reinicialização.