Estou solucionando problemas de acesso ao servidor SSH (servidor do fornecedor, não meu). Tenho uma chave GPG rsa4096 com frase-senha e com subchave Authentication. Exportei a chave ssh para a subchave, verifiquei duas vezes se é a correta e enviei, mas não consigo acessar o servidor.
Adicionei o keygrip de autenticação a ~/.gnupg/sshcontrol, adicionei enable-ssh-support
a ~/.gnupg/gpg-agent.conf e use-agent
a ~/.gnupg/gpg.conf. Também adicionei o seguinte ao meu .bashrc
export GPG_TTY="$(tty)"
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent
Para solução de problemas, usei a opção verbose e notei que todas as minhas chaves de autenticação adicionadas e as chaves ./.ssh/id_* inexistentes são tentadas. Eu queria especificar qual chave seria usada para autenticação especificando as opções IdentitiesOnly e IdentityFile em ~/.ssh/config para seu host. Então, tentei duas coisas:
- Exporte a subchave privada usando gpg e adicione seu caminho como IdentiyFile. Isso não funcionou com "erro em libcrypto". Li que tem algo a ver com formatação, onde gpg não é imediatamente compatível com chaves ssh.
- Exporte a chave pública (tentei tanto armored quanto unaromored) usando gpg e adicione seu caminho como IdentiyFile. Isso também não funcionou e os logs mostram o mesmo "erro em libcrypto". Estranhamente, eles indicam que está sendo tentado como uma chave privada.
debug1: Trying private key: /home/me/.ssh/gpg.pub
Não posso descartar que o fornecedor cometeu um erro ao registrar minhas chaves, mas também não posso descartar que eu não tenha feito nada errado. Alguma ideia?
Eu uso gpg 2.2.27
Não funcionou porque os dois programas usam formatos de chave completamente diferentes – os arquivos de chave PGP não serão compreendidos automaticamente por softwares não PGP.
Você precisa exportar a chave pública no formato OpenSSH, ou seja, da mesma forma que você fez anteriormente para extrair a string 'ssh-rsa' para enviar ao servidor.
Você pode usar
ssh-add -L
para obter todas as chaves públicas atualmente no agente ou apenas copiar a chave de volta do authorized_keys do servidor para um arquivo local id_foo.pub.