Chaves SSH: Guia Completo para Gerar, Utilizar e Configurar como um Profissional
Já lhe aconteceu? Está a tentar aceder a um servidor, digita a password, e recebe a mensagem "Permission denied (publickey,password)". Tenta outra vez. Outra. E outra. Até que desiste e recorre ao suporte técnico, que lhe diz, com um ar de quem já viu isto mil vezes: "Tem de configurar a chave SSH."
A sensação de impotência é real. A autenticação por chave SSH é uma das tecnologias mais poderosas e mal compreendidas do mundo do desenvolvimento. A boa notícia? É mais simples do que parece.
Neste guia, vou mostrar-lhe exatamente como gerar, configurar e utilizar chaves SSH. Com passos detalhados que qualquer pessoa pode seguir, incluindo exemplos práticos para Windows, Linux, macOS e GitHub. No final, vai conseguir autenticar-se num servidor ou no GitHub sem nunca mais precisar de uma password.
Se trabalha com servidores ou faz deployment de aplicações, este guia complementa o nosso artigo sobre Node.js ou PHP: o que escolher para o seu projeto, onde abordamos a escolha da tecnologia backend que também impacta a forma como gere acessos e autenticação.
O que são Chaves SSH (e porque são melhores que passwords)
O SSH (Secure Shell) é o protocolo que usamos para aceder remotamente a servidores. A autenticação por chave pública é a forma mais segura de o fazer, especialmente quando combinada com boas práticas de segurança web.
O princípio é simples: gera um par de chaves (pública e privada). Coloca a chave pública no servidor. Mantém a chave privada no seu computador. Quando tenta aceder, o servidor usa a chave pública para verificar se a chave privada é legítima.
Porque as chaves SSH são melhores que passwords:
- A força de uma chave SSH é muito superior ao que um humano consegue memorizar
- Cada chave é única, ao contrário das passwords que as pessoas reutilizam
- As chaves SSH são imunes a ataques de força bruta
- A chave privada nunca é transmitida pela rede, ao contrário das passwords
- Uma vez configurada, a autenticação é transparente
Tipos de Chaves SSH: Qual escolher
A escolha do tipo de chave é o primeiro passo. Esta decisão é semelhante à escolha entre Node.js ou PHP para o backend - depende do contexto e dos requisitos do projeto. Aqui estão as opções atuais, com base na documentação oficial da OpenSSH.
Ed25519 (Recomendado)
Ed25519 é a escolha recomendada pela OpenSSH para novas configurações. Oferece aproximadamente 128 bits de segurança, chaves curtas, geração rápida e é suportado por todas as ferramentas modernas. É a opção padrão para a maioria dos casos de uso.
RSA 4096 bits
RSA continua a ser seguro quando configurado corretamente com 4096 bits, mas Ed25519 é normalmente preferível para novas configurações. RSA pode ser útil quando existe necessidade de compatibilidade com sistemas mais antigos que não suportam Ed25519.
ECDSA - geralmente não é a primeira escolha
ECDSA não é recomendado para novas chaves. Ed25519 é normalmente preferível pela simplicidade e pelas propriedades do esquema. Apenas para ambientes muito específicos onde Ed25519 não está disponível.
DSA (Descontinuado)
DSA utiliza parâmetros que já não são considerados adequados para uso moderno. A OpenSSH desativou DSA por defeito em versões recentes. Não use DSA.
FIDO2 Security Keys (ed25519-sk)
Se tiver uma chave de segurança FIDO2, pode usar ed25519-sk para autenticação com presença física. A chave privada é protegida pelo dispositivo e a autenticação exige interação física (toque no dispositivo). Consulte a FIDO Alliance para mais detalhes.
Resumo: Use Ed25519 em novos projetos. Use RSA 4096 apenas para compatibilidade com sistemas antigos. Evite ECDSA e não use DSA.
Acesso ao OpenSSH e Ferramentas
OpenSSH (Windows, macOS, Linux)
Windows 10/11: O OpenSSH Client vem instalado por padrão nas versões mais recentes. Para verificar se está disponível, abra o PowerShell e execute:
ssh -VSe o comando não for reconhecido, pode instalar o cliente OpenSSH nas definições do Windows em "Aplicações" > "Aplicações e funcionalidades" > "Funcionalidades opcionais" > "Adicionar uma funcionalidade" > "Cliente OpenSSH". Consulte a documentação oficial da Microsoft para mais detalhes.
macOS e Linux: O OpenSSH vem pré-instalado na maioria das distribuições. Use o terminal para todos os comandos.
PuTTY
O PuTTY é uma ferramenta popular em Windows que inclui o PuTTYgen para gerar chaves SSH. Pode descarregar o PuTTY em https://www.putty.org/.
MobaXterm
O MobaXterm é uma ferramenta que inclui o MobaKeyGen para gerar chaves SSH. Pode descarregar em https://mobaxterm.mobatek.net/.
Tera Term
O Tera Term é uma alternativa que inclui um gerador de chaves SSH. Pode descarregar em https://teratermproject.github.io/.
Passo 1: Verificar se já tem chaves SSH
Antes de gerar novas chaves, verifique se já existem. É comum ter gerado uma sem se lembrar.
No terminal (Linux/macOS/Windows PowerShell):
# Verificar se existem chaves SSH
ls -la ~/.ssh/Se vir ficheiros como id_ed25519 e id_ed25519.pub, ou id_rsa e id_rsa.pub, já tem chaves. Se não vir nada, ou apenas ficheiros de configuração, está na hora de gerar.
Passo 2: Gerar um par de chaves SSH
No OpenSSH (Terminal, PowerShell, Linux/macOS)
O comando ssh-keygen é a ferramenta padrão para gerar chaves SSH.
Para gerar uma chave Ed25519 (recomendado):
ssh-keygen -t ed25519 -C "seu-email@exemplo.com"Para gerar uma chave RSA 4096 bits (para compatibilidade):
ssh-keygen -t rsa -b 4096 -C "seu-email@exemplo.com"O que cada parte do comando significa:
ssh-keygen- o comando para gerar chaves-t ed25519- o tipo de chave (Ed25519 ou rsa)-b 4096- o número de bits (apenas para RSA)-C- um comentário (normalmente o email, para identificar a chave)
Posso gerar uma chave sem email?
Sim, absolutamente. O parâmetro -C (comentário) é opcional. Se não fornecer um email, a chave será gerada na mesma. O comentário serve apenas para identificar a chave, especialmente quando tem várias chaves no servidor.
Se não quiser usar email:
ssh-keygen -t ed25519O sistema vai gerar a chave sem comentário ou com um comentário padrão (normalmente o nome do utilizador e o nome do computador).
Se quiser um comentário personalizado sem ser email:
ssh-keygen -t ed25519 -C "chave-servidor-producao-2026"
ssh-keygen -t ed25519 -C "notebook-pessoal"
ssh-keygen -t ed25519 -C "github-deploy-key"Dica: Sempre que possível, use um comentário descritivo. Quando tiver várias chaves no servidor (ex: uma para o seu portátil, outra para o servidor de CI/CD), o comentário ajuda a saber qual é qual.
Exemplo de chave pública com comentário:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... notebook-pessoalExemplo de chave pública sem comentário:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI...A chave funciona exatamente da mesma forma. A diferença é apenas a identificação visual.
O que acontece a seguir?
O sistema pergunta onde guardar a chave:
Enter file in which to save the key (/home/user/.ssh/id_ed25519):Aperte Enter para aceitar a localização padrão. Depois pede uma passphrase:
Enter passphrase (empty for no passphrase):A passphrase é recomendada. Se alguém roubar a sua chave privada, sem a passphrase não consegue usá-la. A passphrase deve ser de 10 a 100 caracteres, com maiúsculas, minúsculas, números e símbolos.
Exemplo completo no PowerShell
PS C:> ssh-keygen -t ed25519 -C "notebook-trabalho"
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:Usersusername/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:Usersusername/.ssh/id_ed25519.
Your public key has been saved in C:Usersusername/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:sPWZyx1CASEFDuqR1dX7WkvKArMBnQnLFFwxZznv6Pw notebook-trabalhoCom o PuTTYgen (PuTTY)
- Abra o PuTTYgen (normalmente no menu do PuTTY ou como executável separado)
- Selecione o tipo de chave:
Ed25519(recomendado) ouRSA - Defina o número de bits para 4096 (se escolher RSA)
- Clique em Generate e mova o rato sobre a área em branco para gerar entropia
- Defina uma passphrase nos campos "Key passphrase" e "Confirm passphrase"
- No campo "Key comment", pode escrever um identificador (ex: "servidor-producao", "meu-portatil", ou mesmo o seu email). Este campo é opcional.
- Clique em Save private key para guardar a chave privada (formato .ppk)
- A chave pública aparece no campo "Public key for pasting into OpenSSH authorized_keys file"
Com o MobaKeyGen (MobaXterm)
- Abra o MobaXterm e vá ao menu Tools > MobaKeyGen (SSH key generator)
- Escolha o tipo de chave (recomendado: EdDSA Ed25519)
- Clique em Generate e mova o rato para gerar entropia
- Defina uma passphrase para a chave privada
- No campo "Comment", pode escrever um identificador (opcional)
- Clique em Save private key para guardar a chave privada (formato .ppk)
- A chave pública no formato OpenSSH aparece no campo "OpenSSH type public key"
Com o Tera Term
- Abra o Tera Term e cancele a ligação inicial
- Vá ao menu Setup > SSH KeyGenerator
- Escolha o tipo de chave (recomendado: ED25519)
- Defina a passphrase
- No campo "Comment", pode escrever um identificador (opcional)
- Clique em Generate
- Clique em Save public key e Save private key para guardar ambos os ficheiros
Passo 3: Os ficheiros gerados
Depois de gerar as chaves, tem dois ficheiros na pasta ~/.ssh/:
Chave privada (id_ed25519 ou id_rsa):
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
... (conteúdo encriptado) ...
-----END OPENSSH PRIVATE KEY-----Nunca partilhe este ficheiro. É a sua chave de casa. Guarde-o como se fosse a chave do seu cofre.
Chave pública (id_ed25519.pub ou id_rsa.pub):
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... notebook-trabalhoEste ficheiro pode ser partilhado. É a fechadura que vai colocar nos servidores. A chave pública no formato OpenSSH é uma única linha que começa com ssh-ed25519 ou ssh-rsa, seguida da chave em si, e opcionalmente um comentário.
Passo 4: Configurar a chave pública no servidor
Agora que tem o par de chaves, precisa de colocar a chave pública no servidor.
No OpenSSH (Unix/Linux/macOS) - ssh-copy-id (recomendado)
Se tiver acesso ao servidor com password, use:
ssh-copy-id -i ~/.ssh/id_ed25519.pub utilizador@servidor.comO comando pergunta a password do servidor, copia a sua chave pública para ~/.ssh/authorized_keys, e configura as permissões automaticamente.
No Windows PowerShell (se ssh-copy-id não estiver disponível)
type $env:USERPROFILE.sshid_ed25519.pub | ssh utilizador@servidor.com "cat >> .ssh/authorized_keys"Este comando usa o type do Windows para ler o ficheiro da chave pública e envia-o para o servidor, onde é adicionado ao ficheiro authorized_keys.
Manual (Linux/macOS/Windows)
cat ~/.ssh/id_ed25519.pub | ssh utilizador@servidor.com "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"Ou copie o conteúdo da chave pública e cole-o no ficheiro ~/.ssh/authorized_keys do servidor.
Permissões importantes no servidor:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keysConsulte a documentação oficial da OpenSSH para mais detalhes sobre permissões e configuração.
Se está a configurar um servidor para um projeto, lembre-se que a gestão de acessos é tão importante quanto a escolha da tecnologia. Veja o nosso artigo sobre Node.js ou PHP: o que escolher para o backend para uma visão mais ampla sobre a arquitetura do seu projeto.
Passo 5: Configurar o SSH Agent
Se colocou uma passphrase na chave privada, o SSH Agent guarda-a em memória para não ter de a repetir.
O que é o ssh-agent? O ssh-agent é um programa que corre em segundo plano e guarda as suas chaves privadas em memória. Quando precisa de usar SSH, o agente fornece a chave automaticamente, sem que tenha de introduzir a passphrase de cada vez.
O que é o ssh-add? O ssh-add é o comando que adiciona chaves ao agente. É como "entregar" a chave ao agente para ele guardar.
No Linux/macOS
Iniciar o agente e adicionar a chave:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519No Windows PowerShell
Pode iniciar o agente de forma automática:
# Definir o agente para iniciar automaticamente
Set-Service ssh-agent -StartupType Automatic
# Iniciar o agente
Start-Service ssh-agent
# Adicionar a chave privada
ssh-add $env:USERPROFILE.sshid_ed25519
# Verificar as chaves carregadas
ssh-add -lComandos úteis do ssh-add:
# Listar as chaves carregadas no agente
ssh-add -l
# Remover uma chave específica do agente
ssh-add -d ~/.ssh/id_ed25519
# Remover todas as chaves do agente
ssh-add -DO sistema pede a passphrase uma vez. A partir daí, fica guardada até terminar a sessão ou até reiniciar o computador.
No PuTTY (Pageant)
O Pageant é o agente SSH para o PuTTY. Execute o Pageant, clique com o botão direito no ícone na bandeja do sistema, e selecione "Add Key". Selecione o ficheiro .ppk da chave privada e introduza a passphrase.
No MobaXterm
O MobaXterm tem um agente integrado. Quando configurar uma sessão SSH com uma chave privada, a passphrase é pedida automaticamente na ligação.
Passo 6: Configurar o ficheiro ~/.ssh/config
O ficheiro ~/.ssh/config permite configurar atalhos para diferentes servidores. É uma das ferramentas mais poderosas para quem usa SSH regularmente.
Exemplo de configuração para servidores:
# Servidor de produção
Host producao
HostName 192.168.1.100
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519_producao
IdentitiesOnly yes
# Servidor de staging
Host staging
HostName staging.meuservidor.com
User admin
Port 2222
IdentityFile ~/.ssh/id_rsa_stagingO que fica mais fácil:
Em vez de escrever:
ssh -i ~/.ssh/id_ed25519_producao deploy@192.168.1.100 -p 22Escreve apenas:
ssh producaoExemplo de configuração para múltiplas contas GitHub:
# Conta pessoal
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
# Conta de trabalho
Host github-trabalho
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_trabalho
IdentitiesOnly yesCom esta configuração, para usar a conta de trabalho, faz:
git clone git@github-trabalho:empresa/repositorio.gitEsta organização de ficheiros e configurações é semelhante à forma como estruturamos projetos de software. Se está a desenvolver uma aplicação, veja o nosso artigo sobre quando vale a pena desenvolver software à medida para entender como a infraestrutura e acessos se integram no desenvolvimento.
Passo 7: Utilizar SSH com GitHub
O GitHub é um dos casos de uso mais comuns para chaves SSH. Em vez de usar username/password para cada operação Git, pode usar uma chave SSH.
Gerar uma chave para o GitHub
ssh-keygen -t ed25519 -C "github" -f ~/.ssh/id_ed25519_githubAdicionar a chave pública ao GitHub
- Copie a chave pública:
cat ~/.ssh/id_ed25519_github.pub - No GitHub, vá a Settings > SSH and GPG keys > New SSH Key
- Cole a chave e guarde
Consulte a documentação oficial do GitHub para mais detalhes.
Testar a ligação ao GitHub
ssh -T git@github.comSe funcionar, verá:
Hi seu-usuario! You have successfully authenticated, but GitHub does not provide shell access.Diferença entre URL HTTPS e SSH
Para clonar um repositório com SSH, use o URL no formato:
git@github.com:utilizador/repositorio.gitEm vez de HTTPS:
https://github.com/utilizador/repositorio.gitPasso 8: Testar a configuração
Depois de tudo configurado, teste:
# Testar ligação ao servidor
ssh utilizador@servidor.com
# Se configurou o ficheiro config
ssh producao
# Testar GitHub (para quem usa Git)
ssh -T git@github.comSe algo falhar, use o modo verboso para diagnóstico:
ssh -v utilizador@servidor.comO modo verboso mostra detalhes da negociação, incluindo quais chaves estão a ser oferecidas e se o servidor as aceita. Procure linhas como:
debug1: Offering public key: /home/user/.ssh/id_ed25519
debug1: Server accepts key: /home/user/.ssh/id_ed25519
debug1: Authentication succeeded (publickey).Para ver a configuração efetiva que o SSH está a usar:
ssh -G servidor-producaoEste comando mostra a configuração completa que o SSH vai aplicar para aquele host, incluindo o ficheiro IdentityFile, portas e opções.
Erros Comuns e Soluções
Erro: "Permission denied (publickey)"
Causa: A chave pública não está no servidor ou as permissões estão erradas.
Solução:
# Verificar permissões no servidor
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# Verificar o conteúdo da chave pública local
cat ~/.ssh/id_ed25519.pub
# Comparar com a chave no servidor
cat ~/.ssh/authorized_keysUse o modo verboso para diagnosticar:
ssh -v utilizador@servidor.comErro: "Connection refused" ou "Connection timed out"
Causa: O servidor não está a aceitar ligações ou o firewall está a bloquear a porta.
Solução: Verificar se o servidor está online e se a porta 22 está aberta.
Erro: "Agent admitted failure to sign"
Causa: O agente não tem a chave carregada.
Solução:
# Adicionar a chave ao agente
ssh-add ~/.ssh/id_ed25519
# Verificar as chaves carregadas
ssh-add -lErro: Muitas chaves carregadas
Se tiver muitas chaves no agente, o servidor pode rejeitar a ligação porque excedeu o número máximo de tentativas de autenticação.
Solução: Use a opção IdentitiesOnly no ~/.ssh/config para forçar o uso de uma chave específica:
Host servidor-producao
IdentitiesOnly yes
IdentityFile ~/.ssh/id_ed25519Erro: "Bad permissions" no servidor
Causa: O ficheiro authorized_keys tem permissões demasiado permissivas.
Solução:
chmod 600 ~/.ssh/authorized_keysErro: "No such file or directory" no Windows
Causa: A pasta .ssh não existe.
Solução:
mkdir $env:USERPROFILE.sshSegurança Operacional
Backup da chave privada
A chave privada é o seu acesso a servidores. Se a perder, perde o acesso. No entanto, nunca guarde a chave privada numa cloud sem proteção (ex: Google Drive, Dropbox) sem encriptação.
Se precisar de fazer backup, use um cofre de passwords (ex: Bitwarden, 1Password) ou encripte o ficheiro com GPG antes de o guardar.
Esta prática de segurança alinha-se com as boas práticas que abordamos no artigo sobre segurança web: como proteger o seu site e os dados dos clientes, onde explicamos a importância de proteger acessos e dados sensíveis.
Revogação de chaves comprometidas
Se suspeitar que a sua chave privada foi comprometida:
- Remova a chave pública do servidor: edite
~/.ssh/authorized_keyse elimine a linha correspondente - Remova a chave do GitHub/GitLab/etc.
- Gere uma nova chave
- Substitua a chave em todos os sistemas que dependem dela
Chaves por finalidade
Uma chave para o GitHub, outra para servidores pessoais, outra para clientes. Se uma chave for comprometida, o dano fica limitado a um serviço ou conjunto de servidores.
Esta abordagem de separação por responsabilidades é semelhante à que usamos no desenvolvimento de software, onde diferentes ambientes (desenvolvimento, staging, produção) têm diferentes níveis de acesso. Veja o nosso artigo sobre webdesign vs desenvolvimento web para entender como diferentes papéis e acessos se organizam num projeto.
Manter o OpenSSH atualizado
Mantenha o OpenSSH atualizado e consulte os avisos de segurança da sua distribuição e do projeto OpenSSH. Versões antigas podem conter vulnerabilidades já corrigidas em versões posteriores.
Ferramentas para Windows: Resumo
| Ferramenta | Gerador de Chaves | Formato da Chave Privada | Agente SSH |
|---|---|---|---|
| OpenSSH (PowerShell) | ssh-keygen | OpenSSH | ssh-agent |
| PuTTY | PuTTYgen | .ppk | Pageant |
| MobaXterm | MobaKeyGen | .ppk ou OpenSSH | Integrado |
| Tera Term | SSH KeyGenerator | .ppk ou OpenSSH | Integrado |
Nota sobre formatos: O PuTTY e MobaXterm usam o formato .ppk. O OpenSSH usa o formato padrão. MobaXterm aceita ambos. Para converter entre formatos, pode usar o PuTTYgen (menu "Conversions" > "Import key" e depois exportar no formato desejado).
Perguntas Frequentes
Posso gerar uma chave SSH sem email?
Sim, absolutamente. O parâmetro -C (comentário) é opcional. Pode gerar uma chave sem qualquer comentário ou com um comentário personalizado que não seja um email.
# Sem comentário
ssh-keygen -t ed25519
# Com comentário personalizado (não email)
ssh-keygen -t ed25519 -C "servidor-producao-2026"Posso usar a mesma chave para vários serviços?
Sim, pode. Muitas pessoas usam a mesma chave SSH para o GitHub, servidores pessoais e outros serviços. No entanto, por questões de segurança, é recomendado usar chaves diferentes para serviços diferentes. Se uma chave for comprometida, o dano fica limitado.
Como listar as chaves carregadas no agente?
ssh-add -lComo remover uma chave do agente?
# Remover uma chave específica
ssh-add -d ~/.ssh/id_ed25519
# Remover todas as chaves
ssh-add -DComo forçar o uso de uma chave específica?
Use a opção -i:
ssh -i ~/.ssh/id_ed25519_producao utilizador@servidor.comOu configure no ~/.ssh/config:
Host servidor-producao
IdentityFile ~/.ssh/id_ed25519_producao
IdentitiesOnly yesSe está a planear um projeto que envolva autenticação e gestão de acessos, estes conhecimentos são fundamentais. Para uma visão mais completa sobre como estruturar um projeto digital, veja o nosso guia sobre criação de sites profissionais em Portugal.
Precisa de uma solução semelhante?
Se procura um website rápido, moderno e otimizado para o Google, ou pretende desenvolver uma aplicação web ou software à medida, veja os serviços disponíveis.