Criar SSH Keys em sistemas UNIX
Key Pair, ou SSH Keys ou ainda Chave Pública consiste em duas chaves uma pública que deve ser instalada no servidor remoto, e a outra chave privada que fica salva no seu computador, as duas juntas permitem que você conecte de forma segura a um servidor remoto usando o protocolo SSH ou SFTP.
Para criar sua SSH key em ambientes Unix siga os passos logo abaixo, se você é usuário Windows visite o post como criar ssh key pair no windows.
Passo 1: Verifique seu já possui SSH Key
Veja se já existe SSH keys no seu computador, em ambientes Unix pode ser encontrado em um desses diretórios ~/.ssh/identity
, ~/.ssh/id_ecdsa
, ~/.ssh/id_dsa
ou ~/.ssh/id_rsa
. Para verificar digite no terminal:
ls -al ~/.ssh
Dica: se você tiver uma nova instalação Mac OSX ou Linux, você não terá o diretório
~/.ssh
criado ainda, esse diretório onde armazena suas chaves públicas e privadas será criado automaticamente no passo seguinte.
Passo 2: Criar uma nova SSH Key
Se ainda não tem sua SSH key deverá gerar uma usando o comando ssh-keygen
:
ssh-keygen -t rsa -b 4096 -C "seuemail@example.com"
Explicando o comando acima:
Parâmetro
-t
específica o tipo de chave nesse caso usamos o algoritmorsa
para protocolo versão 2 outros possíveis valores sãorsa1
,dsa
eecdsa
.Parâmetro
-C
adiciona um comentário à chave pública, é apenas uma maneira fácil de identificar a finalidade desta chave, o valor pode seruser@host
.Parâmetro
-b
informa key size ou total de bits. O padrão é2048
, geralmente esse valor já é o suficiente para sua chave se quiser mais segurança use o valor máximo4096
.
ATENÇÃO: Para chaves RSA o valor mínimo é de
768
bits, mas não crie sua chave com menos de2048
bits pois estudos apontam que é possível craquear esses tipos de chaves.
Defina Passphrase
O Passphrase é como uma senha e precisa ser digitado to vez que usar a chave para se conectar SSH, se você esquecer o Passphrase ou outra pessoa ter acesso à sua Private Key ficará impossibilitado de conectar ao servidor remoto. Caso não queira definir um Passphrase apenas deixe em branco, pressione enter duas vezes para finalizar.
Passo 4: Copie sua chave pública para o servidor
Após executar o comando para gerar SSH keys dois arquivos serão salvos no diretório ~/ssh
por padrão os arquivos são id_rsa
e id_rsa.pub
, mas é possível criá-los com nomes e diretórios diferentes se for necessário.
A chave pública, cujo a extensão é .pub
, deve ser copiado para o servidor e o seu conteúdo é algo como:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQA .....
A chave privada tem o seguinte conteúdo:
-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEAzpHUcAE5w5e49Qw2S4cp17OmsIc1D8yfNR7y/ZLsf0382zsw
.....
e deve ter apenas permissão de leitura pelo seu usuário, altere usando o comando:
chmod 400 ~/.ssh/id_rsa
Com sua SSH key pair criada, é hora de copiar a chave pública para o servidor, se você não é o administrador do servidor remoto deverá enviar o conteúdo da chave pública para o responsável fazer isso.
No servidor remoto, usando um editor de sua preferencia adicione a chave pública ao arquivo ~/.ssh/authorized_keys
, ou simplesmente utilize o comando:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Passo 5: Faça um teste com sua SSH Key
ssh user@123.456.789.0
Se sua SSH key foi salva em um diretório diferente de ~/.ssh
você deverá informar o diretório onde esta a chave para para ter sucesso na conexão com servidor.
ssh -i /diretorio/subpasta/sua_chave_privada user@123.456.789.0
Passo 6: Bonus, usuários Mac OSX
Se você definiu um Passphrase, pode salvar esse valor na sua Keychain e assim evitar ter que digitar o passphrase sempre que for conectar ao servidor remoto. Para adicionar sua SSH key na Keychain use o comando ssh-add
:
ssh-add -K ~/.ssh/id_rsa
Digite sua Passphrase e sua chave será armazena na Keychain.
Para visualizar a lista de chaves adicionadas ao ssh-agent
:
ssh-add -l
Esse comando exibe o tamanho de bits de sua chave, footprint e o diretório da chave privada da seguinte forma:
2048 ee:aa:11:11:bb:cc:gg:11:Ca:Fe:00:E1:49:30:8C:01 ~/.ssh/id_rsa (RSA)