Guia Passo a Passo para Autenticação Segura por Chave SSH

Configure autenticação segura por chave SSH com chaves ED25519, authorized_keys, ssh-agent e configurações mais seguras do sshd.

Guia Passo a Passo para Autenticação Segura por Chave SSH

A autenticação por chave SSH protege seu servidor contra muitos ataques baseados em senha, mas apenas se você gerar a chave com cuidado, instalar a chave pública corretamente e testar o acesso antes de alterar as configurações do servidor.

Este guia aborda a geração de chaves ED25519, instalação da chave pública, teste de login e configurações mais seguras do daemon SSH.

Entendendo a Autenticação por Chave SSH

A autenticação por chave SSH depende de um par de chaves criptograficamente vinculadas: uma chave privada e uma chave pública.

  • Chave Privada: Esta chave deve permanecer secreta e protegida em sua máquina local. É como uma senha altamente complexa que só você possui.
  • Chave Pública: Esta chave pode ser compartilhada livremente e é colocada no servidor remoto ao qual você deseja acessar. Ela é usada pelo servidor para verificar sua identidade.

Quando você tenta se conectar, o servidor usa sua chave pública para desafiar sua máquina local. Sua máquina local então usa sua chave privada para responder a esse desafio, provando sua identidade sem nunca enviar a chave privada pela rede. Este método não é apenas mais seguro, mas também mais conveniente, pois elimina a necessidade de digitar uma senha para cada conexão, uma vez configurado corretamente.

Passo 1: Gerando Seu Par de Chaves SSH

O utilitário ssh-keygen é usado para criar novos pares de chaves SSH. Recomenda-se o uso de algoritmos modernos e fortes, como ED25519.

Escolha um Tipo e Força de Chave

Embora as chaves RSA ainda sejam amplamente utilizadas, a ED25519 oferece excelente segurança com comprimentos de chave mais curtos e operações mais rápidas. Para novas configurações, a ED25519 é geralmente preferida.

Gere o Par de Chaves

Em sua máquina local (cliente), abra o terminal e execute o seguinte comando:

ssh-keygen -t ed25519 -C "[email protected]"
  • -t ed25519: Especifica o tipo de chave como ED25519.
  • -C "[email protected]": Adiciona um comentário à chave pública, frequentemente usado para identificação. Substitua pelo seu e-mail real ou um rótulo descritivo.

O comando solicitará um local para salvar a chave e uma frase secreta opcional.

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/seuusuario/.ssh/id_ed25519): 
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: ...

Defina uma Frase Secreta Forte (Altamente Recomendado)

Quando solicitado, sempre defina uma frase secreta forte para sua chave privada. Essa frase secreta criptografa sua chave privada em sua máquina local, fornecendo uma camada adicional de segurança. Se sua chave privada cair em mãos erradas, ela será inútil sem a frase secreta. Você pode usar ssh-agent para evitar digitar a frase secreta repetidamente (veja o Passo 4).

Locais dos Arquivos de Chave

Por padrão, o ssh-keygen salva sua chave privada em ~/.ssh/id_ed25519 e sua chave pública em ~/.ssh/id_ed25519.pub.

Permissões para Sua Chave Privada

É crucial que seu arquivo de chave privada tenha permissões muito restritas. Apenas o proprietário deve poder lê-lo. O ssh-keygen geralmente define isso corretamente, mas é bom verificar:

chmod 600 ~/.ssh/id_ed25519

Passo 2: Distribuindo Sua Chave Pública para o Servidor

Depois de gerar seu par de chaves, sua chave pública precisa ser copiada para o servidor remoto ao qual você deseja acessar. Ela deve ser colocada em um arquivo chamado authorized_keys dentro do diretório ~/.ssh/ do seu usuário no servidor remoto.

Método 1: Usando ssh-copy-id (Recomendado)

ssh-copy-id é o método mais simples e seguro. Ele faz login no servidor remoto (usando sua senha), cria o diretório ~/.ssh se não existir, define permissões corretas e anexa sua chave pública a ~/.ssh/authorized_keys.

ssh-copy-id usuario@ip_do_seu_servidor

Substitua usuario pelo seu nome de usuário no servidor remoto e ip_do_seu_servidor pelo endereço IP ou nome do host do servidor. Você será solicitado a fornecer sua senha no servidor remoto.

Método 2: Cópia Manual

Se ssh-copy-id não estiver disponível, você pode copiar a chave pública manualmente.

  1. Copie o conteúdo da chave pública da sua máquina local:

    cat ~/.ssh/id_ed25519.pub
    

    Copie toda a saída para a área de transferência (ela começa com ssh-ed25519 ...).

  2. Faça login no servidor remoto usando sua senha:

    ssh usuario@ip_do_seu_servidor
    
  3. Crie o diretório ~/.ssh se não existir e defina as permissões:

    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    
  4. Anexe sua chave pública ao authorized_keys:

    echo "COLE_SUA_CHAVE_PUBLICA_AQUI" >> ~/.ssh/authorized_keys
    

    Certifique-se de substituir COLE_SUA_CHAVE_PUBLICA_AQUI pelo conteúdo real que você copiou. Usar >> (anexar) é importante para evitar sobrescrever chaves existentes, se houver.

  5. Defina as permissões corretas para authorized_keys:

    chmod 600 ~/.ssh/authorized_keys
    
    • Aviso: Permissões incorretas em ~/.ssh ou ~/.ssh/authorized_keys impedirão o funcionamento da autenticação por chave.

Passo 3: Teste Sua Autenticação por Chave SSH

Antes de prosseguir para desabilitar a autenticação por senha, é absolutamente crítico verificar se a autenticação por chave funciona corretamente. Saia do servidor remoto se ainda estiver conectado das etapas de cópia manual.

Da sua máquina local, tente se conectar ao servidor sem especificar uma senha:

ssh usuario@ip_do_seu_servidor
  • Se você definiu uma frase secreta para sua chave privada, será solicitado a digitá-la.
  • Se a conexão for bem-sucedida sem uma solicitação de senha (após a frase secreta, se aplicável), sua autenticação por chave está funcionando. Você deve ver o prompt do servidor remoto.

NÃO prossiga para o Passo 4 se você não conseguir fazer login usando sua chave SSH. Solucione quaisquer problemas antes de desabilitar a autenticação por senha, ou você corre o risco de se trancar para fora do servidor.

Passo 4: Aumentando a Segurança - Desabilitando a Autenticação por Senha

Depois de confirmar que a autenticação por chave SSH está funcionando, você pode desabilitar logins baseados em senha em seu servidor para melhorar significativamente a segurança. Isso impede ataques de força bruta contra sua senha e garante que apenas aqueles com chaves SSH válidas possam acessar o servidor.

  1. Faça login em seu servidor remoto usando sua chave SSH.

    ssh usuario@ip_do_seu_servidor
    
  2. Edite o arquivo de configuração do daemon SSH. Este arquivo geralmente está localizado em /etc/ssh/sshd_config.

    sudo nano /etc/ssh/sshd_config
    

    (Você pode usar vi ou seu editor de texto preferido em vez de nano.)

  3. Localize e modifique as seguintes diretivas:

    • Encontre PasswordAuthentication e altere seu valor para no.

      #PasswordAuthentication yes
      PasswordAuthentication no
      

      (Remova o comentário da linha se estiver comentada com #)

    • Encontre KbdInteractiveAuthentication e altere seu valor para no. Em versões mais antigas do OpenSSH, a diretiva equivalente pode ser ChallengeResponseAuthentication.

      KbdInteractiveAuthentication no
      
    • (Opcional, mas recomendado) Considere desabilitar o login root diretamente via SSH se você planeja usar sudo após fazer login como um usuário regular.

      PermitRootLogin no
      
    • (Opcional) Considere alterar a porta SSH padrão de 22 para uma porta alta não padrão (por exemplo, 2222). Isso não adiciona segurança contra ataques direcionados, mas pode reduzir o ruído de scanners de porta automatizados.

      #Port 22
      Port 2222
      

      Se você alterar a porta, lembre-se de especificá-la com a flag -p ao conectar (por exemplo, ssh -p 2222 usuario@ip_do_seu_servidor).

  4. Salve as alterações e saia do editor de texto.

  5. Reinicie o serviço SSH para aplicar a nova configuração. O comando varia ligeiramente dependendo do seu sistema operacional (por exemplo, Ubuntu/Debian vs. CentOS/RHEL).

    • Sistemas baseados em Systemd (a maioria das distribuições Linux modernas):

      sudo sshd -t
      sudo systemctl restart sshd
      
    • Sistemas mais antigos baseados em SysVinit:

      sudo service ssh restart
      
  6. Crucialmente, abra uma nova janela de terminal (não feche sua sessão SSH ativa atual!) e tente fazer login usando sua chave. Isso testa a nova configuração sem se trancar para fora se algo der errado.

    ssh usuario@ip_do_seu_servidor
    

    Se você alterou a porta:

    ssh -p 2222 usuario@ip_do_seu_servidor
    

    Se a conexão for bem-sucedida, você pode fechar com segurança sua sessão SSH original.

    Se o novo login falhar, reverta imediatamente as alterações no sshd_config em sua sessão SSH original ainda ativa e reinicie o serviço SSH novamente, depois reavalie.

Melhores Práticas e Dicas

  • Sempre use uma frase secreta forte para sua chave privada. Esta é sua última linha de defesa se sua chave privada for comprometida.
  • Proteja sua chave privada. Nunca a compartilhe e certifique-se de que esteja armazenada de forma segura com permissões de arquivo estritas (chmod 600 ~/.ssh/id_ed25519). Considere módulos de segurança de hardware (HSMs) ou YubiKeys para proteção máxima.
  • Use ssh-agent para conveniência. O ssh-agent permite que você carregue sua(s) chave(s) privada(s) na memória e digite sua frase secreta apenas uma vez por sessão, mesmo em várias conexões SSH. Adicione sua chave ao agente com ssh-add ~/.ssh/id_ed25519.
  • Rotacione regularmente suas chaves SSH. Periodicamente, gere novos pares de chaves e remova chaves públicas antigas de seus servidores, especialmente se um membro da equipe sair ou a segurança de uma chave for suspeita de estar comprometida.
  • Limite PermitRootLogin para no ou prohibit-password. Geralmente é melhor fazer login como um usuário regular e usar sudo para tarefas administrativas.
  • Configure um firewall. Certifique-se de que apenas portas necessárias (como sua porta SSH) estejam abertas para a internet. Ferramentas como ufw ou firewalld podem ajudar.

Conclusão Final

Sua chave privada agora é sua principal credencial de login, então proteja-a com uma frase secreta e permissões de arquivo estritas. Mantenha uma sessão SSH testada aberta enquanto altera o sshd_config, valide a configuração com sshd -t e feche a sessão antiga apenas após um novo login baseado em chave funcionar.