Idioma
Categoria
Pesquisar

O que são chaves SSH e como usá-las para substituir a senha na rede

Saiba como gerar o par de chaves pública e privada, entenda suas funções e os algoritmos RSA e Ed25519. Como copiar a chave para o servidor e autorizar a conexão sem senha

Em Terminal Por Rudi Drusian Lange
Publicado em
Última atualização

Leitura rápida

Se você já sabe o que esta fazendo e só precisa lembrar os comandos:

Shell

# Cria as chaves usando o algoritmo ed25519
ssh-keygen -t ed25519

# Transfere a chave para o servidor
ssh-copy-id usuario@servidor_remoto

Para quem quer entender o que esta fazendo, leia o texto abaixo.

Chaves SSH são credenciais de autenticação

Parte do protocolo SSH (Secure Shell), as chaves utilizam a tecnologia denominada infraestrutura de chaves públicas PKI, (do inglês public key infrastructure), que é um padrão altamente conceituado de autenticação e criptografia usado por dispositivos e usuários como identidade virtual na rede digital.

As chaves são criadas em pares, uma pública a ser compartilhada com o servidor remoto, e uma privada que fica armazenada no computador local. Em uma nova conexão, a chave privada é fornecida no computador local e conferida pelo servidor remoto usando a chave pública.

Diferentes algoritmos são utilizados na criação das chaves de autenticação, dois comuns são:

  • RSA - Altamente seguro, possui um tamanho de 2048 ou 4096 bits e mantém uma maior compatibilidade com sistemas operacionais antigos.
  • Ed25519 - Padrão mais recente que confere o mesmo nível de segurança e eficiência das chaves RSA porém com um tamanho menor, de 256 bits. Seu uso tem aumentado em diversas plataformas.

Gerando o par de chaves

Este artigo irá demonstrar a criação de uma chave Ed25519 mas pode ser seguido também para gerar uma chave RSA.

Shell

ssh-keygen -t ed25519

Generating public/private ed25519 key pair
Enter file in which to save the key (/home/usuario/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/usuario/.ssh/id_ed25519
Your public key has been saved in /home/usuario/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:NWi5nmnJ/wAji+J1tUH2go2qO1Pou3MjY0Ivyirzz04 usuario@hostlocal
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|         o       |
|        * o      |
|       B + .     |
|   .  + S .      |
| .. .o * X       |
|..o.E o O .      |
|=oOBo. . . .     |
|**O&+.    ...    |
+----[SHA256]-----+

Será perguntado o local de armazenamento da chave, pressione para manter o caminho padrão. Será solicitada uma senha (passphrase) e sua confirmação, você pode pressionar e deixá-la em branco. Neste caso será possível conectar-se ao servidor remoto, a partir da maquina local em que as chaves foram criadas, sem digitar uma senha.

A passphrase é uma senha para a chave privada e só difere do sentido tradicional da palavra senha porque é usada para gerar a criptografia da chave. O seu uso é encorajado por oferecer uma segunda proteção, não sendo suficiente alguém ter acesso a chave privada sem saber a senha.

A decisão entre usar ou não depende do ambiente em que as chaves serão usadas, em um computador em que somente uma pessoa tem acesso pode ser mais seguro não usar a senha do que em um local onde outras pessoas possam usá-lo.

Mais de 90% das chaves criadas nas grandes empresas não usam uma passphrase, isto permite a automatização de processos sem a interação humana. Estabelecem-se políticas de acesso para aumentar a segurança.

As chaves são criadas por padrão na pasta .ssh/ dentro da home do usuário, a chave com nome id_ed25519 é a privada e deve ser mantida em segredo enquanto a chave nomeada id_ed25519.pub é a pública que pode ser compartilhada com o servidor remoto.

Transferindo a chave para o servidor remoto

No exemplo abaixo o parâmetro -p é usado para indicar uma porta alternativa e o -i para apontar o caminho da chave pública. Estes parâmetros podem ser omitidos para usar as opções padrões.

ssh-copy-id -p porta_ssh -i ~/.ssh/id_ed25519.pub usuario@servidor_remoto

ssh-copy-id: INFO: Source of key(s) to be installed: "/home/usuario/.ssh/id_ed25519.pub"
ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
usuario@servidor_remoto's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh -p 'porta_ssh' 'usuario@servidor_remoto'"
and check to make sure that only the key(s) you wanted were added.

A senha do usuário no servidor remoto será solicitada para realizar a transferência da chave pública. Se a linha Number of key(s) added: 1 for exibida significa que a chave foi adicionada com sucesso.

Com a chave pública instalada, a senha para acesso remoto ao servidor via SSH não será mais solicitada no login ou para transferências de arquivos usando os comandos scp ou rsync. Se uma senha foi utilizada na criação da chave, ela deverá ser utilizada a cada conexão.

É possível colocar a senha em um arquivo para que não seja necessário digitá-la a cada acesso, mas este cenário derrota o propósito de ter uma passphrase já que esta também estará visível em caso de uma invasão.

Teste o acesso ao servidor remoto:

ssh usuario@servidor_remoto

A chave SSH é usada como credencial no lugar da senha.

Concluindo

O uso das chaves SSH é muito interessante, pode permitir a automação em diversas situações, como por exemplo um backup sem interação humana e com horário programado entre servidores. Também aumenta a segurança ao encorajar o uso de senhas mais robustas, já que não será necessário digitá-las a cada acesso.

Referências