Sempre fico em d√ļvida para gerar chaves SSH, deve ser pelo tempo que demoro para ter de fazer de novo. Por isso resolvi fazer uma anota√ß√£o. Espero que seja √ļtil a voc√™ tamb√©m.

Primeiramente geramos a chave:

$ ssh-keygen -t rsa -b 4096 -C <email> -f "<nome-do-arquivo>" -N ""

Onde:

  • -t o tipo da chave a ser gerada: rsa1 (antiga), rsa (2¬™ vers√£o), dsa, ecdsa, ed25519
  • -b quantidade de bits utilizados para gera√ß√£o da chave
  • -C adiciona um coment√°rio na hash gerada (geralmente usado para inserir o email)
  • -f indica o nome do arquivo a ser salvo
  • -N define uma senha (passphrase) para o par de chaves (se for inserido algo, sempre que precisar utilizar a chave precisar√° redigitar essa senha)

Um exemplo pr√°tico seria:

Nota: No post utilizo a pasta $HOME/.ssh/ com o arquivo exemplo_rsa, mas você pode alterar os 2 para os nomes e lugares que quiser. Basta apenas substituir pelo que quer nas partes onde o caminho/arquivo citado é utilizado:

$ ssh-keygen -t rsa -b 4096 -C "email@flaverton.com" -f "$HOME/.ssh/exemplo_rsa" -N ""

O comando ssh-agent -s, tem como saída variáveis chave=valor e o comando eval executa a saída do comando anterior, assim adicionando as váriaveis a sessão Shell corrente.

$ eval "$(ssh-agent -s)"

Agora iremos adicionar a chave privada a m√°quina atual e fazer com que ela - a chave privada - fique registrada:

$ ssh-add "$HOME/.ssh/exemplo_rsa"

Isso adiciona a chave na sessão corrente do Shell, se abrir ele de novo terá de refazer o comando ou adicionar ele no ~/.bashrc, ~/.zshrc ou arquivo de configuração do seu Shell.

Usando em servidores

Para enviar para um servidor e conectar usando o par de chaves SSH, não precisando de senha utilize o comando abaixo, que fará a cópia de modo mais simples.

$ ssh-copy-id -i <chave> <usuario-remoto>@<servidor>

Algo como:

$ ssh-copy-id -i ~/.ssh/chave.pub flaverton@192.168.3.50

Em seguida, depois de apertar enter digite a senha de conexão neste servidor, pronto a próxima vez que se conectar ele não irá pedir senha.

Enviar para serviços web

Para copiar o conte√ļdo da chave p√ļblica e enviar ao Github, Gitlab, Digital Ocean, Scaleway e servi√ßos similares pode simplesmente copiar a sa√≠da do comando abaixo para o campo que √© pedido nos servi√ßos:

cat "$HOME/.ssh/exemplo_rsa.pub"

O arquivo correto √© o .pub, que √© sua chave p√ļblica.

V√° ao site ou onde deseja colar a chave e aperte ctrl+v ou bot√£o direito e clicar em colar, pronto.

Listar as chaves cadastras

Para isso utilizaremos as flags -l e/ou -L do comando ssh-add, que fará a exibição das chaves em 2 modos, do fingerprint ou da chave completa (formato OpenSSH), como é indicado nessa resposta do Stackoverflow.

  • Para fingerprint
$ ssh-add -l
  • Para formato OpenSSH
$ ssh-add -L

Referências

Atualização

  • 24 de setembro de 2020: corrigida a explica√ß√£o do comando eval "$(ssh-agent -s)", adicionada a explica√ß√£o sobre persist√™ncia da chave entre sess√Ķes de Shell e adi√ß√£o da flag -i no envio de chave ao servidor.