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.