Módulo 2 · 2.1
Criar e utilizar chaves SSH
Módulo 2: SSH e chaves · Tempo de leitura: 10 minutos
Objetivo de aprendizagem: No final desta lição, saberá criar um par de chaves, colocar a chave pública no seu servidor, iniciar sessão sem palavra-passe e guardar a sua chave privada de forma a que um portátil perdido não se torne uma catástrofe.
Conceitos-chave: par de chaves, chave pública, chave privada, ed25519, RSA, frase-passe (passphrase), ssh-agent, ssh-copy-id, authorized_keys, permissões 700 e 600, uma chave por dispositivo, chave FIDO2
Porque é que as chaves são melhores do que as palavras-passe
Na lição 1.3 iniciou sessão com uma palavra-passe. Funciona, mas um servidor na internet recebe, desde o primeiro minuto, visitas de programas que tentam adivinhar palavras-passe. Basta consultar o registo de um servidor acabado de instalar:
root@web1:~# journalctl -u ssh --since "1 hour ago" | grep -c "Failed password"
214Centenas de tentativas por hora é normal. Uma palavra-passe forte trava-as, mas criou um ponto fraco de que não precisa. Com uma chave SSH, adivinhar não serve de nada: não há nada para adivinhar que conste de uma lista de palavras.
Uma chave é composta por duas partes que pertencem uma à outra, um par de chaves:
- A chave privada fica no seu próprio computador. Quem tiver este ficheiro (e conhecer a frase-passe) consegue iniciar sessão. Não a partilhe com ninguém, nem com o seu fornecedor nem com um serviço de apoio.
- A chave pública é entregue ao servidor. Pode ser vista por qualquer pessoa: não permite iniciar sessão, apenas verificar.
Ao iniciar sessão, não é enviada qualquer palavra-passe pela ligação. O seu computador prova, com uma assinatura, que possui a chave privada, e o servidor verifica essa assinatura com a chave pública. Mesmo que alguém esteja a observar a rede, não vê nada que possa reutilizar mais tarde.
Criar uma chave
A chave é criada no seu próprio computador, não no servidor. No Windows 10 e 11, no macOS e no Linux, o ssh-keygen já vem incluído. Abra o PowerShell ou o Terminal:
anna@laptop:~$ ssh-keygen -t ed25519 -C "anna@laptop 2026"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/anna/.ssh/id_ed25519):
Enter passphrase for "/home/anna/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/anna/.ssh/id_ed25519
Your public key has been saved in /home/anna/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026O que acontece aqui?
-t ed25519escolhe o tipo. Ed25519 é curto, rápido e seguro e, desde o OpenSSH 9.5, é também o tipo predefinido quando não indica nada. Se tiver de servir um sistema antigo que não conheça o ed25519, utilize RSA com pelo menos 3072 bits:ssh-keygen -t rsa -b 4096. Tipos mais antigos, como o DSA, foram removidos do OpenSSH; não os utilize.-Cé apenas um comentário. Escreva algo que lhe permita ver mais tarde de que dispositivo é a chave. Isso ajuda imenso quando tiver de revogar uma chave.- A frase-passe cifra a chave privada no seu disco. Se o seu portátil for roubado, o ladrão fica com um ficheiro cifrado. Sem frase-passe, tem acesso imediato a todos os seus servidores.
Tem agora dois ficheiros:
| Ficheiro | O que é | Partilhar? |
|---|---|---|
~/.ssh/id_ed25519 | Chave privada | Nunca |
~/.ssh/id_ed25519.pub | Chave pública, uma linha de texto | Sim, com o servidor |
No Windows, encontram-se em C:\Users\anna\.ssh\. A chave pública é uma linha que começa por ssh-ed25519:
anna@laptop:~$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHk2... anna@laptop 2026Colocar a chave pública no servidor
O servidor procura as chaves públicas no ficheiro ~/.ssh/authorized_keys do utilizador com que inicia sessão. Cada linha é uma chave. Há três formas de lá colocar a sua chave:
1. Na instalação. A maioria dos fornecedores tem, ao criar ou reinstalar um VPS, um campo para a sua chave pública. Na WebOké, esse campo chama-se "Chave SSH" no ecrã do VPS; noutros fornecedores funciona de forma semelhante. Esta é a melhor forma: assim, nunca é necessário ter o início de sessão por palavra-passe ativo.
2. Com o ssh-copy-id (macOS e Linux), enquanto o início de sessão por palavra-passe ainda funciona:
anna@laptop:~$ ssh-copy-id anna@192.0.2.10
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed
anna@192.0.2.10's password:
Number of key(s) added: 13. Manualmente, por exemplo a partir do Windows ou através da consola do seu fornecedor. Cole a linha do seu ficheiro .pub em authorized_keys e acerte as permissões:
anna@web1:~$ mkdir -p ~/.ssh
anna@web1:~$ nano ~/.ssh/authorized_keys
anna@web1:~$ chmod 700 ~/.ssh
anna@web1:~$ chmod 600 ~/.ssh/authorized_keysEstas permissões não são um pormenor. O servidor SSH verifica-as (a opção StrictModes está ativa por predefinição): se outros puderem escrever na sua pasta .ssh ou na sua pasta pessoal, ele ignora as suas chaves. Nesse caso, volta simplesmente a ver um pedido de palavra-passe, sem uma mensagem de erro clara. Aprenderá a ler permissões na lição 3.1.
Em seguida, teste numa janela nova:
anna@laptop:~$ ssh anna@192.0.2.10
Enter passphrase for key '/home/anna/.ssh/id_ed25519':
anna@web1:~$O pedido vem agora do seu próprio computador (a frase-passe da sua chave), e já não do servidor.
ssh-agent: desbloquear uma única vez
Escrever a frase-passe todas as vezes é incómodo. O ssh-agent mantém a sua chave desbloqueada em memória enquanto tiver sessão iniciada no seu computador:
anna@laptop:~$ ssh-add ~/.ssh/id_ed25519
Enter passphrase for /home/anna/.ssh/id_ed25519:
Identity added: /home/anna/.ssh/id_ed25519 (anna@laptop 2026)
anna@laptop:~$ ssh-add -l
256 SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026 (ED25519)No macOS, o agente liga-se ao porta-chaves; no Windows, é o serviço "OpenSSH Authentication Agent" (ativar uma única vez em Serviços). Assim, tem a comodidade de não precisar de palavra-passe e, ainda assim, uma chave cifrada no disco.
Atenção ao agent forwarding (ssh -A): permite que o servidor em que inicia sessão utilize o seu agente. Quem for root nesse servidor pode então avançar com a sua chave. Utilize-o apenas em servidores em que confie totalmente, ou utilize ProxyJump (lição 2.3).
Uma chave por dispositivo, e saber quais estão onde
Um erro frequente: copiar uma única chave privada para o portátil, o computador de secretária e o telemóvel. Se perder um dispositivo, tem de substituir a chave em todo o lado e configurar de novo todos os dispositivos. Melhor:
- crie em cada dispositivo uma chave própria, com um comentário claro (
-C "anna@telefoon"); - coloque todas as chaves públicas em
authorized_keys, uma por linha; - se perder um dispositivo, remova apenas essa linha.
Verifique regularmente que chaves têm acesso:
anna@web1:~$ ssh-keygen -lf ~/.ssh/authorized_keys
256 SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026 (ED25519)
256 SHA256:Zt5oP1yW8eQ3rK6sV0bN9mD2xA4cH7jL1uI5fG8tE3w anna@telefoon (ED25519)Se encontrar uma chave que não reconhece, isso é um sinal de alarme (lição 10.3). Os intrusos gostam de colocar a sua própria chave em authorized_keys para poderem voltar mais tarde.
Uma chave de hardware (FIDO2, como uma YubiKey) também é possível. Com ssh-keygen -t ed25519-sk, a parte secreta fica na própria chave e tem de lhe tocar em cada utilização. Um ficheiro roubado deixa então de ter valor. É um bom passo em frente, mas não é necessário para começar.
Perdeu a sua chave privada?
Se perder a sua única chave privada e o início de sessão por palavra-passe estiver desativado, deixa de conseguir entrar por SSH. Por isso:
- coloque sempre pelo menos duas chaves no servidor (por exemplo, portátil e computador de secretária);
- saiba como funciona a consola do seu fornecedor (lição 1.2). Aí inicia sessão como se tivesse um teclado ligado ao servidor, e isso funciona mesmo sem SSH. Na WebOké, chama-se Consola no ecrã do VPS; outros fornecedores chamam-lhe consola VNC, consola web ou consola de emergência.
No AlmaLinux e no Rocky Linux
Tudo nesta lição funciona da mesma forma. Uma armadilha adicional: com o SELinux ativo, ~/.ssh tem de ter a etiqueta de segurança correta. Se criou ou copiou a pasta manualmente e a sua chave é ignorada, restorecon -Rv ~/.ssh resolve isso.
Resumo
- Um par de chaves é composto por uma chave privada (fica consigo) e uma chave pública (vai para o servidor, em
~/.ssh/authorized_keys). - Crie chaves com
ssh-keygen -t ed25519no seu próprio computador, com uma frase-passe; utilize o ssh-agent por comodidade. - As permissões contam:
~/.sshem 700 eauthorized_keysem 600, caso contrário o servidor ignora a sua chave. - Uma chave por dispositivo, com um comentário claro, para poder revogar apenas uma.
- Tenha uma segunda chave e conheça a consola do seu fornecedor como acesso de emergência.
Questionário
Exercício
Exercício O2.1: Criar e utilizar uma chave. Crie no seu próprio computador uma chave ed25519 com uma frase-passe e um comentário claro, coloque-a no seu servidor (através do campo do seu fornecedor, com o ssh-copy-id ou manualmente), verifique as permissões e inicie sessão com a chave numa janela nova. Em seguida, introduza a impressão digital da sua chave (obtida com ssh-keygen -lf ~/.ssh/id_ed25519.pub) e responda às perguntas sobre onde está a sua chave privada e o que faz se a perder. O programa verifica apenas se a impressão digital tem o formato correto; o resto fica a seu cargo.
Exercício O2.1: Criar e utilizar uma chave
Este exercício faz você mesmo; ninguém o verifica. Assinale o que já fez e marque o exercício como concluído.
A chave privada fica no seu próprio dispositivo, cifrada com uma passphrase, e não numa pasta na nuvem nem num e-mail. Em caso de roubo, remova a linha desse dispositivo do authorized_keys em todos os servidores e crie uma nova chave. Nunca cole a sua chave privada, nem mesmo aqui.
As suas marcações e notas ficam apenas neste navegador; não as enviamos para lado nenhum. Se tiver sessão iniciada, guardamos em Os meus cursos apenas que concluiu o exercício.
Para saber mais
Os passos destes artigos aplicam-se ao ecrã do VPS e aos painéis da WebOké; noutros fornecedores funciona de forma semelhante.
- Iniciar sessão no seu VPS com SSH (e criar uma chave SSH)
- Manual DirectAdmin 15.2: Chaves do SSH e iniciar sessão com SSH
- Sem acesso ao seu VPS: o que fazer?
- Manual do ssh-keygen: https://man.openbsd.org/ssh-keygen
- Notas de lançamento do OpenSSH 9.5 (ed25519 como predefinição): https://www.openssh.org/txt/release-9.5
