É possível utilizar um par de chaves geradas no GNU Privacy Guard (GnuPG) (https://www.gnupg.org/) em conexões seguras (SSH) (https://www.openssh.com/). A configuração é um pouco mais trabalhosa, porém a pessoa utiliza uma só chave pública em todos os acessos, ou seja, não existe a necessidade de gerar um par de chaves em vários computadores. As seguintes configurações foram testadas nos ambientes Debian GNU/Linux 9 (Stretch) e Debian GNU/Linux 8 (jessie):
1ª tarefa: configurar o arquivo </etc/bash.bashrc> (no Debian GNU/Linux 9 - stretch):
export GPG_TTY=$(tty)
= = = = = = = = = =
= = = = = = = = = =
2ª tarefa: criar uma subchave do GnuPG específica para autenticação.
= = = = = = = = = =
= = = = = = = = = =
3ª tarefa: indicar para o aplicativo "gpg-agent" qual é a subchave pública a ser utilizada para autenticação (no arquivo $HOME/.gnupg/sshcontrol, acrescentar o valor da "keygrip" da subchave pública).
gpg --list-public-keys --with-keygrip
O comando acima exibe todas as chaves e subchaves públicas.
= = = = = = = = = =
= = = = = = = = = =
4ª tarefa: exportar a subchave pública (para colocar no arquivo $HOME/.ssh/authorized_keys no computador remoto).
gpg2 --export-ssh-key 08a86180
Esse comando exporta todas as subchaves públicas, cujo uso foi configurado para autenticação, já no formato apropriado para se incluir no arquivo "$HOME/.ssh/authorized_keys".
= = = = = = = = = =
= = = = = = = = = =
5ª tarefa: incluir a subchave apropriada para autenticação (exibida na 4ª tarefa) no arquivo apropriado dentro do diretório </$HOME/$USER/.ssh/>:
Na hipotese de uma chave RSA:
gpg --export-ssh-key 08a86180 > /$HOME/$USER/.ssh/.ssh/id_rsa
Configurar as permissões de acesso ao arquivo apropriadamente:
chmod -v 0600 /$HOME/$USER/.ssh/id_rsa
Adicionar a subchave ao agente gerenciador de chaves do OpenSSH:
ssh-add
Obs.: esse comando exibirá a seguinte mensagem:
Enter passphrase for /$HOME/$USER/.ssh/id_rsa:
Verificar se a subchave foi adicionada:
ssh-add -l
Esse comando confirma se a chave foi adicionada.
= = = = = = = = = =
= = = = = = = = = =
6ª tarefa: habilitar o suporte a SSH no aplicativo "gpg-agent" (no arquivo "$HOME/.gnupg/gpg-agent.conf", acrescentar as seguintes linhas):
enable-ssh-support
pinentry-program /usr/bin/pinentry-tty
= = = = = = = = = =
= = = = = = = = = =
7ª tarefa: inicializar a variável de ambiente "SSH_AUTH_SOCK", bem como o aplicativo "gpg-agent" automaticamente ao se logar (no arquivo "$HOME/.bash_profile", acrescentar as seguintes linhas):
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpg-connect-agent -vv updatestartuptty /bye > /dev/null 2>&1
Obs.: a segunda linha foi incluída, também, no arquivo </etc/profile>, pois o aplicativo "pinentry" estava com mau funcionamento quando executado dentro do aplicativo "screen" (GNU Screen).
Obs.: a justificativa para se incluir a mesma linha em dois arquivos é que o arquivo <.bash_profile> é lido quando do login no sistema (shell de login interativo), ao passo que o arquivo </etc/profile> é lido quando se acessa, por exemplo, o aplicativo "screen"; o aplicativo "su"; o aplicativo "chroot" (ou seja, shell de não-login interativo; inicializa-se um novo shell, porém não a partir de um login).
= = = = = = = = = =
= = = = = = = = = =
Obs.: no Debian GNU/Linux 8 (jessie), a configuração é diferente (no arquivo $HOME/.bashrc):
gpg-agent --daemon --enable-ssh-support --write-env-file "${HOME}/.gpg-agent-info"
if [ -f "${HOME}/.gpg-agent-info" ]; then
. "${HOME}/.gpg-agent-info"
export GPG_AGENT_INFO
export SSH_AUTH_SOCK
fi
Jamenson Ferreira Espindula de Almeida Melo
Usuário GNU/Linux nº 166197
https://linuxcounter.net/cert/166197.png
Impressão digital da chave:
234D 1914 4224 7C53 BD13 6855 2AE0 25C0 08A8 6180