Entendendo a Autenticação por Chave SSH: Chaves Pública e Privada Explicadas
Desvende os segredos da autenticação por chave SSH com este guia abrangente. Aprenda os papéis fundamentais das chaves pública e privada, como elas trabalham juntas para proteger suas conexões remotas e por que esse método supera amplamente os logins baseados em senha. Este artigo fornece instruções passo a passo para gerar e implantar chaves, juntamente com benefícios essenciais de segurança e melhores práticas. Melhore a segurança do seu servidor e simplifique o acesso com chaves SSH.
Entendendo a Autenticação por Chave SSH: Chaves Pública e Privada Explicadas
A autenticação por chave SSH é a forma padrão que muitos administradores, desenvolvedores, sistemas de CI e ferramentas de implantação usam para fazer login em servidores. Seu laptop mantém uma chave privada, o servidor armazena a chave pública correspondente, e o SSH prova que você possui a chave privada sem enviá-la pela rede.
Essa última parte é o ponto principal. Uma senha é um segredo que você digita em muitos lugares. Uma chave privada é um segredo que deve permanecer em sua máquina. Se você a proteger com uma frase secreta e armazenar apenas a chave pública nos servidores, obtém um método de login que é ao mesmo tempo mais seguro e mais fácil de automatizar do que senhas compartilhadas.
O Problema com Senhas
A autenticação tradicional baseada em senha depende de um segredo compartilhado: a senha. Embora senhas fortes possam fornecer um nível decente de segurança, elas são suscetíveis a várias fraquezas:
- Ataques de força bruta: Atacantes podem tentar inúmeras combinações de senhas até acertar.
- Ataques de dicionário: Usando palavras ou frases comuns, atacantes podem comprometer contas rapidamente.
- Keyloggers: Software malicioso pode capturar digitações, revelando senhas.
- Phishing: Táticas de engenharia social podem enganar usuários para que divulguem suas credenciais.
- Erro humano: Usuários frequentemente escolhem senhas fracas, adivinháveis ou reutilizadas, e podem expô-las acidentalmente.
A autenticação por chave SSH reduz esses riscos porque o segredo privado não é digitado no servidor remoto. Isso não torna as chaves mágicas. Uma chave privada não criptografada roubada ainda pode ser abusada, e um arquivo authorized_keys mal gerenciado pode se tornar uma porta dos fundos silenciosa.
Autenticação por Chave SSH: Uma Visão Geral
A autenticação por chave SSH aproveita a criptografia assimétrica, um sistema que usa um par de chaves matematicamente ligadas: uma chave pública e uma chave privada. Diferente da criptografia simétrica, onde a mesma chave é usada tanto para criptografar quanto para descriptografar, a criptografia assimétrica usa uma chave para criptografar e uma chave diferente, mas relacionada, para descriptografar.
Quando você se conecta com chaves, o servidor verifica se sua conta confia na chave pública que está sendo oferecida. Seu cliente então assina dados de autenticação com a chave privada correspondente. O servidor verifica essa assinatura com a chave pública. A chave privada não é enviada para o servidor.
A Dupla Criptográfica: Chaves Pública e Privada
No centro da autenticação por chave SSH estão esses dois componentes distintos, mas interconectados.
A Chave Privada
A chave privada é sua identidade secreta. É uma longa e complexa sequência de caracteres que deve ser mantida em absoluto sigilo e nunca compartilhada com ninguém. Pense nela como a chave única para seu cofre digital.
- Crítica para a Segurança: Se sua chave privada for comprometida, um atacante pode se passar por você e obter acesso não autorizado a qualquer servidor onde a chave pública correspondente foi implantada.
- Localização: Normalmente armazenada em sua máquina local (ex.:
~/.ssh/id_rsa,~/.ssh/id_ed25519). - Proteção: Pode ser protegida por uma frase secreta. Se alguém copiar o arquivo de chave, a frase secreta é a barreira extra entre "arquivo roubado" e "acesso ao servidor roubado".
A Chave Pública
A chave pública é a contraparte da sua chave privada. Ela é derivada da sua chave privada, mas não pode ser usada para recriar a chave privada. Como o nome sugere, a chave pública deve ser compartilhada e colocada em qualquer servidor ao qual você deseja acessar.
- Compartilhável: Você pode distribuir com segurança sua chave pública para qualquer pessoa ou servidor sem comprometer sua segurança.
- Localização: No servidor, as chaves públicas são normalmente armazenadas no arquivo
~/.ssh/authorized_keyspara cada conta de usuário. Cada linha neste arquivo representa uma chave pública confiável. - Função: A chave pública permite que o servidor verifique uma assinatura feita pela chave privada correspondente.
Como Funciona a Autenticação por Chave SSH: O Handshake
Vamos detalhar o processo passo a passo de como a autenticação por chave SSH estabelece uma conexão segura:
- Geração do Par de Chaves: Primeiro, você gera um par de chaves pública e privada em sua máquina local. A chave privada permanece secreta, e a chave pública é o que você distribuirá.
- Implantação da Chave Pública: Você copia sua chave pública para o servidor remoto ao qual deseja acessar. Esta chave é normalmente adicionada ao arquivo
~/.ssh/authorized_keysno diretório home do seu usuário no servidor. - Tentativa de Conexão: Quando você inicia uma conexão SSH de sua máquina local para o servidor remoto, seu cliente SSH indica que deseja autenticar usando uma chave.
- Verificação do Servidor: O servidor verifica se a chave pública oferecida é permitida para aquele usuário.
- Prova do Cliente: Seu cliente assina dados de autenticação com a chave privada. Se a chave privada tiver uma frase secreta, você pode ser solicitado a desbloqueá-la localmente.
- Verificação: O servidor verifica a assinatura usando a chave pública do
authorized_keys. Se a assinatura for válida e a conta tiver permissão para fazer login, a autenticação é bem-sucedida. - Autenticação Concedida: Se a verificação for bem-sucedida, o servidor concede acesso e uma sessão SSH segura é estabelecida.
Crucialmente, sua chave privada nunca sai de sua máquina local durante todo esse processo. Apenas provas criptográficas derivadas dela são trocadas.
Gerando um Par de Chaves SSH
Gerar um par de chaves SSH é um processo direto usando o comando ssh-keygen em sua máquina local (Linux, macOS ou WSL/Git Bash no Windows).
ssh-keygen -t ed25519 -C "[email protected]"
-t ed25519: Especifica o tipo de chave a ser criada. Ed25519 é um padrão moderno para a maioria das novas chaves OpenSSH. RSA ainda é comum, especialmente em sistemas mais antigos.-C "[email protected]": Adiciona um comentário à chave pública, o que ajuda a identificar seu propósito ou proprietário.
Você será solicitado a fornecer um arquivo para salvar a chave (padrão é ~/.ssh/id_ed25519) e uma frase secreta. Sempre use uma frase secreta forte para proteger sua chave privada.
Generating public/private ed25519 key pair.
Enter file in which to save the key (~/.ssh/id_ed25519):
Created directory '/home/seuusuario/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/seuusuario/.ssh/id_ed25519.
Your public key has been saved in /home/seuusuario/.ssh/id_ed25519.pub.
The key fingerprint is: SHA256:...
The key's randomart image is:
+--[ED25519 256]----+
| .=+ |
| . o. . |
| . + o. |
| o = B o. |
| . S @ + + |
| = + B . |
| o * * E |
| . o o |
| . . |
+----[SHA256]-------+
Após a geração, você terá dois arquivos em seu diretório ~/.ssh:
id_ed25519(sua chave privada)id_ed25519.pub(sua chave pública)
Certifique-se de que seu arquivo de chave privada tenha permissões restritas:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
Implantando Sua Chave Pública
Para usar a autenticação por chave, sua chave pública deve ser colocada no servidor remoto ao qual você deseja acessar.
Usando ssh-copy-id (Recomendado)
O utilitário ssh-copy-id é a maneira mais simples e segura de implantar sua chave pública. Ele cuida da criação do diretório ~/.ssh e do arquivo authorized_keys com as permissões corretas, se eles não existirem.
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@servidor_remoto
Substitua usuario pelo seu nome de usuário no servidor remoto e servidor_remoto pelo endereço IP ou nome do host do servidor. Você será solicitado a fornecer sua senha para usuario@servidor_remoto pela última vez para enviar a chave.
Implantação Manual
Se o ssh-copy-id não estiver disponível, você pode copiar a chave pública manualmente:
Copie o conteúdo da chave pública: Exiba sua chave pública usando
cat.cat ~/.ssh/id_ed25519.pubCopie toda a saída, que começa com
ssh-ed25519 ...e termina com seu comentário.Conecte-se via SSH ao servidor remoto usando autenticação por senha:
ssh usuario@servidor_remotoDigite sua senha quando solicitado.
Crie o diretório
~/.sshe o arquivoauthorized_keysse eles não existirem:mkdir -p ~/.ssh chmod 700 ~/.ssh touch ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keysAdicione sua chave pública ao
authorized_keys: Cole o conteúdo da chave pública que você copiou anteriormente no arquivoauthorized_keys.echo "ssh-ed25519 AAAA..." >> ~/.ssh/authorized_keys(Substitua
ssh-ed25519 AAAA...pelo conteúdo real da sua chave pública)
Conectando-se com Chaves SSH
Depois que sua chave pública estiver no servidor, você pode se conectar simplesmente especificando o usuário e o host:
ssh usuario@servidor_remoto
Se você tiver vários pares de chaves ou sua chave privada não estiver no local padrão (~/.ssh/id_rsa ou ~/.ssh/id_ed25519), você pode precisar especificá-la usando a opção -i:
ssh -i ~/.ssh/minha_chave_personalizada usuario@servidor_remoto
Se sua chave privada for protegida por uma frase secreta, você será solicitado a digitá-la. Para evitar digitar a frase secreta repetidamente durante uma sessão, você pode usar o ssh-agent.
Benefícios de Segurança da Autenticação por Chave SSH
- Reduz o risco de adivinhação de senha: Se o login por senha estiver desabilitado, os atacantes não podem usar força bruta nessa conta através de senhas SSH.
- Credenciais mais fortes: Uma chave SSH gerada corretamente não é algo que um humano possa adivinhar.
- Nenhum upload de chave privada: Sua chave privada permanece local durante a autenticação.
- Amigável para Automação: As chaves permitem logins com script, sem senha, o que é essencial para ferramentas de automação e pipelines de CI/CD.
- Proteção por Frase Secreta: Adicionar uma frase secreta à sua chave privada fornece uma camada extra de segurança. Mesmo que seu arquivo de chave privada seja roubado, ele permanece inutilizável sem a frase secreta.
Gerenciando Suas Chaves SSH
ssh-agent
ssh-agent é um programa que é executado em segundo plano e mantém suas chaves privadas descriptografadas na memória. Quando você tenta se conectar a um servidor SSH, seu cliente SSH pode consultar o ssh-agent pela chave privada necessária, eliminando a necessidade de digitar sua frase secreta repetidamente.
Para iniciar o ssh-agent e adicionar sua chave:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Você digitará sua frase secreta uma vez ao adicionar a chave ao agente.
Nomenclatura e Organização de Chaves
Para gerenciar várias chaves (por exemplo, para diferentes organizações, projetos ou uso pessoal), considere usar nomes significativos:
ssh-keygen -t ed25519 -f ~/.ssh/id_trabalho_projeto -C "chave_trabalho_projeto"
ssh-keygen -t ed25519 -f ~/.ssh/id_pessoal_github -C "chave_pessoal_github"
Você pode então especificar qual chave usar com a opção -i, ou configurar seu arquivo ~/.ssh/config para selecionar automaticamente a chave correta com base no host.
Exemplo de ~/.ssh/config:
Host github.com
IdentityFile ~/.ssh/id_pessoal_github
User git
Host servidor-trabalho
Hostname 192.168.1.100
IdentityFile ~/.ssh/id_trabalho_projeto
User devuser
Melhores Práticas e Dicas
- Nunca compartilhe sua chave privada: Esta é a regra de ouro. Sua chave privada é sua identidade digital.
- Use uma frase secreta forte: Proteja sua chave privada com uma frase secreta robusta, semelhante a uma senha forte. Isso torna sua chave inútil mesmo se cair em mãos erradas.
- Rotacione quando houver um motivo: Gere uma nova chave quando um dispositivo for perdido, um contratante sair, uma chave for compartilhada por engano ou um algoritmo antigo não atender mais à sua política.
- Restrinja as permissões de arquivo: Certifique-se de que seu arquivo de chave privada tenha permissões
600(rw-------) e seu diretório~/.sshtenha700(rwx------). - Desabilite a autenticação por senha com cuidado: Assim que o login por chave funcionar a partir de um segundo terminal, muitos servidores devem definir
PasswordAuthentication noem/etc/ssh/sshd_config. Mantenha o acesso ao console disponível antes de alterar isso em sistemas remotos. - Use
ssh-agent: Para conveniência e segurança, use ossh-agentpara gerenciar suas chaves, especialmente aquelas com frases secretas.
Um Modelo Mental Simples
A chave pública é a fechadura que você instala na conta do servidor. A chave privada é a credencial que você mantém em sua própria máquina. A frase secreta protege essa credencial se o arquivo for copiado. O arquivo authorized_keys é a lista de acesso.
A maioria dos problemas com chave SSH vem de confundir esses conceitos: copiar a chave privada para o servidor, colar a chave pública sob o usuário errado, usar o arquivo de identidade errado ou deixar permissões muito abertas para o OpenSSH confiar nelas. Nomeie as chaves por propósito, proteja as chaves privadas com frases secretas, use ssh-agent para conveniência, remova chaves públicas antigas quando o acesso deve terminar e teste as alterações a partir de um segundo terminal antes de desabilitar o login por senha.