Atualmente não só sysadmin depende de chaves publica/privada para acesso aos seus servidores via SSH, mas desenvolvedores também tem usado bastante este recurso (alguns até mesmo se se dar conta disso) quando precisam fazer seus git fetch/push/pull etc. Há vários casos onde o seu uso é útil então se você ainda não possui a sua é hora de criá-la pois você poderá precisar a qualquer momento.
Dos vários tipos de chaves que podem ser usadas para autenticação atualmente as mais comuns são: RSA, DSA, ECDSA, ED25519; mas não vou me aventurar em explicar as diferenças entre elas pois este é um assunto que vai fugir do escopo proposto aqui.
Na prática vamos considerar que se você tiver uma chave RSA de pelo menos 2048bits, isso basta para que você consiga autenticar nos principais serviços git e ssh existentes atualmente, e se por acaso daqui há uma semana você precisar de uma chave DSA 1024 para um serviço mais antigo ou outro tipo? Simplesmente crie uma nova chave. Você pode ter quantas quiser de qualquer tipo.
Criando seu primeiro par de chaves
No exemplo abaixo e suponho que precise de uma chave RSA de 4096bits para fazer autenticação em um servidor Git da minha empresa, mas você pode e deve alterar os parâmetros conforme sua necessidade
O processo é feito com o único comando abaixo, onde o parâmetro “-t” define o tipo da chave (rsa), o parâmetro “-b” define o seu tamanho (4096bits) , o parâmetro “-C” adiciona um comentário no arquivo da chave pública e o “-f” indica o nome do arquivo com a sua chave privada (o arquivo de chave pública terá o mesmo nome porém com a extensão “.pub”).
ssh-keygen -t rsa -b 4096 -C 'Autorização Git MinhaEmpresa.com' -f minhaempresa_rsa
Este comando vai gerar uma saída parecida com esta abaixo e note que logo no começo foi solicitado que eu informasse uma senha e em seguida a confirmasse.
Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in minhaempresa_rsa Your public key has been saved in minhaempresa_rsa.pub The key fingerprint is: SHA256:LTBqN+CrJpCteBO508Ww7W4ts9uAJxCAIigZcyvuPMM Autorização Git MinhaEmpresa.com The key's randomart image is: +---[RSA 4096]----+ |o. | |B+ . | |= o . o | |.. o.o o . | | +..+=o S . | | +o.++. . | |oE ++oo. | |+ O..o=o. | | +.o o+=. | +----[SHA256]-----+
Não vou entrar no mérito de ser mais ou menos seguro, mas geralmente não colocamos senhas em arquivos de certificado, então, a menos que o responsável pelo servidor especifique o contrário, vamos considerar que seja suficientemente seguro deixar sem senha aqui (basta pressionar ENTER duas vezes).
Publicando sua chave pública
O resultado deste comando será a criação de dois arquivos novos dentro do diretório “.ssh” no seu home.
Um com a sua chave privada chamado “minhaempresa_rsa” e que você deverá manter seguro em seu computador sem que outras pessoas tenham acesso a ela (é de bom juízo que você faça um backup protegido dela em algum outro local também);
O segundo arquivo gerado contém a sua chave pública chamado “minhaempresa_rsa.pub” (este é o arquivo que você irá publicar nos servidores Git, SSH etc), por ser um documento público você não precisa ser paranoico com ele, mas manter uma cópia de segurança é sempre bom.
O processo de publicação vai depender do serviço mas basicamente se resume a colar o conteúdo do arquivo de chave pública em algum lugar e dar um nome de identificação para ele. Veja alguns exemplos.
GitHub
No Github você clica na sua foto de perfil > Settings > SSH and GPG Keys > New SSH Key.
Digita um nome pra chave (geralmente colocamos o mesmo comentário digitado no parâmetro “-C”, mas não é obrigatório) e o conteúdo do arquivo de chave pública (aquele com a extensão “.pub”);
AWS Code Commit
Na AWS para o serviço AWS CodeCommit, você deve entrar no IAM e localizar o seu usuário.
Em seguida entrar em “Minhas credenciais de segurança” > “Credenciais do AWS CodeCommit” > “Fazer Upload da chave pública SSH”.
Então basta colar o conteúdo do arquivo “.pub” na janela que está aberta e clicar no botão “Fazer Upload da chave pública”, porém, dependendo do seu nível de permissões dentro da empresa pode ser que você tenha que enviar o arquivo para o administrador fazer isso por você.
AWS EC2
Já que falamos de AWS para autenticar nos servidores EC2 usando chave pública, você deve enviar seu arquivo da mesma forma.
Entre no serviço AWS EC2 > Rede e Segurança > Pares de Chave > Ações > Importar par de chaves.
Agora digite um nome para sua chave e cole o conteúdo do arquivo “.pub” na caixa seguinte.
Se desejar adicione algumas tags conforme a definição de sua empresa antes de clicar no botão “Importar par de chaves”.
Qualquer servidor Linux
Se estiver precisando enviar sua chave para algum servidor Linux, desde que ele permita o acesso acesso SSH por login/senha, basta usar o comando:
ssh-copy-id -i minhaempresa_rsa meuusuario@servidor.minhaempresa.com
O comando acima envia o arquivo “minhaempresa_rsa.pub” (veja que a extensão é dispensável) para a conta do “meuusuario” no servidor SSH “servidor.minhaempresa.com”.
Será pedida a senha, já que ainda não existe certificado neste servidor, mas após esta etapa estar concluída, todas as vezes que você precisar fazer login por SSH como “meuusuario”, no servidor.minhaempresa.com, ao invés de um pedido de senha, o prompt de comandos será aberto imediatamente.
Caso o seu servidor não aceite autenticação por login/senha, você deverá contactar o administrador para saber o procedimento.
Testando e finalizando
Para testar se deu tudo certo você pode simplesmente tentar fazer o acesso por SSH, ou dar um git pull etc.
Se você nunca fez o login neste servidor você terá algum pedido para confirmar a chave do pública servidor, clicando em algum botão “OK”, “Accept”, ou escrevendo “Yes”.
Esta chave será salva em um outro arquivo em sua máquina chamado known_hosts, mas isso é assunto para outro dia. Até lá.
Um comentário em “Criando um certificado de chave pública”