3 minutos
Gerar chave SSH
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
- man ssh-keygen
- What is the “eval” command in bash?
- How can I run ssh-add automatically, without password prompt?
- How can I copy the output of a command directly into my clipboard?
- How To Set Up SSH Keys
- How to list keys added to ssh-agent with ssh-add?
- Permanently Add SSH key ssh-add
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.