Guia Passo a Passo para Autenticação Segura Baseada em Chave SSH

Desbloqueie uma segurança de acesso remoto superior com este guia abrangente, passo a passo, sobre autenticação baseada em chave SSH. Aprenda a gerar pares de chaves ED25519 robustos, a distribuir sua chave pública com segurança e, crucialmente, a desabilitar logins vulneráveis por senha no seu servidor. Este tutorial fornece comandos práticos e práticas recomendadas essenciais, incluindo o uso de senha (passphrase) e gerenciamento de chaves, garantindo que suas conexões SSH sejam convenientes e altamente seguras. Eleve a defesa do seu servidor contra ataques de força bruta hoje mesmo.

30 visualizações

Guia Passo a Passo para Autenticação Segura Baseada em Chave SSH

O Secure Shell (SSH) é a espinha dorsal da administração remota de sistemas, permitindo acesso seguro a servidores através de uma rede não segura. Embora a autenticação baseada em senha seja comum, ela é inerentemente vulnerável a ataques de força bruta e stuffing de credenciais. A autenticação baseada em chave SSH oferece uma alternativa muito mais robusta e segura, utilizando pares de chaves criptográficas para verificar a identidade sem transmitir senhas.

Este guia o acompanhará durante todo o processo de configuração da autenticação segura baseada em chave SSH. Você aprenderá como gerar seu par de chaves SSH, distribuir sua chave pública de forma segura para um servidor remoto e, crucialmente, fortalecer a configuração SSH do seu servidor, desabilitando logins por senha menos seguros. Ao seguir estas etapas, você aumentará significativamente a postura de segurança do seu acesso remoto, tornando seus sistemas mais resilientes contra vetores de ataque comuns.

Entendendo a Autenticação Baseada em Chave SSH

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

  • Chave Privada: Esta chave deve permanecer secreta e segura 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 este 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 após a configuração correta.

Passo 1: Gerando Seu Par de Chaves SSH

O utilitário ssh-keygen é usado para criar novos pares de chaves SSH. É recomendado usar algoritmos modernos e fortes como ED25519.

Escolha um Tipo e Força de Chave

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

Gere o Par de Chaves

Na sua máquina local (cliente), abra seu 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 senha opcional.

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/youruser/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/youruser/.ssh/id_ed25519
Your public key has been saved in /home/youruser/.ssh/id_ed25519.pub
The key fingerprint is: SHA256:...
The key's randomart image is: ...

Defina uma Senha Forte (Altamente Recomendado)

Quando solicitado, sempre defina uma senha forte para sua chave privada. Essa senha 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 senha. Você pode usar o ssh-agent para evitar digitar a senha repetidamente (veja o Passo 4).

Localizações dos Arquivos de Chave

Por padrã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 o arquivo de sua chave privada tenha permissões muito restritas. Apenas o proprietário deve ser capaz de 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 que 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 ele não existir, define as permissões corretas e anexa sua chave pública a ~/.ssh/authorized_keys.

ssh-copy-id user@your_server_ip

Substitua user pelo seu nome de usuário no servidor remoto e your_server_ip pelo endereço IP ou hostname do servidor. Você será solicitado a digitar sua senha no servidor remoto.

Método 2: Cópia Manual

Se o 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 de sua máquina local:
    bash cat ~/.ssh/id_ed25519.pub
    Copie toda a saída para sua área de transferência (ela começa com ssh-ed25519 ...).

  2. Faça login no servidor remoto usando sua senha:
    bash ssh user@your_server_ip

  3. Crie o diretório ~/.ssh se ele não existir e defina as permissões:
    bash mkdir -p ~/.ssh chmod 700 ~/.ssh

  4. Anexe sua chave pública a authorized_keys:
    bash echo "PASTE_YOUR_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys
    Certifique-se de substituir PASTE_YOUR_PUBLIC_KEY_HERE pelo conteúdo real que você copiou. Usar >> (anexar) é importante para evitar sobrescrever chaves existentes, se houver alguma.

  5. Defina as permissões corretas para authorized_keys:
    bash chmod 600 ~/.ssh/authorized_keys

    • Aviso: Permissões incorretas em ~/.ssh ou ~/.ssh/authorized_keys impedirão que a autenticação baseada em chave funcione.

Passo 3: Teste Sua Autenticação Baseada em Chave SSH

Antes de prosseguir para desabilitar a autenticação por senha, é absolutamente fundamental verificar se a autenticação baseada em chave funciona corretamente. Saia do servidor remoto se você ainda estiver conectado a partir das etapas de cópia manual.

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

ssh user@your_server_ip
  • Se você definiu uma senha para sua chave privada, será solicitado que você a insira.
  • Se a conexão for bem-sucedida sem um prompt de senha (após a senha, se aplicável), sua autenticação baseada em chave está funcionando. Você deverá 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 ficar bloqueado para fora do servidor.

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

Depois de confirmar que a autenticação baseada em chave SSH está funcionando, você pode desabilitar os logins baseados em senha no 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 no seu servidor remoto usando sua chave SSH.
    bash ssh user@your_server_ip

  2. Edite o arquivo de configuração do daemon SSH. Este arquivo geralmente está localizado em /etc/ssh/sshd_config.
    bash 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
      (Descomente a linha se ela estiver comentada com #)

    • Encontre ChallengeResponseAuthentication e altere seu valor para no.
      #ChallengeResponseAuthentication yes ChallengeResponseAuthentication 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 o sinalizador -p ao se conectar (por exemplo, ssh -p 2222 user@your_server_ip).

  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):
      bash sudo systemctl restart sshd

    • Sistemas mais antigos baseados em SysVinit:
      bash 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 bloquear você se algo deu errado.

    bash ssh user@your_server_ip
    Se você alterou a porta:
    bash ssh -p 2222 user@your_server_ip

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

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

Melhores Práticas e Dicas

  • Sempre use uma senha forte para sua chave privada. Esta é sua última linha de defesa caso sua chave privada seja comprometida.
  • Proteja sua chave privada. Nunca a compartilhe e garanta que ela seja armazenada com segurança com permissões de arquivo restritas (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 suas chaves privadas na memória e digite sua senha apenas uma vez por sessão, mesmo em múltiplas conexões SSH. Adicione sua chave ao agente com ssh-add ~/.ssh/id_ed25519.
  • Gire suas chaves SSH regularmente. Periodicamente, gere novos pares de chaves e remova as 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 a 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 as portas necessárias (como sua porta SSH) estejam abertas para a internet. Ferramentas como ufw ou firewalld podem ajudar.

Conclusão

Ao seguir este guia passo a passo, você configurou e protegeu com sucesso a autenticação baseada em chave SSH para seu servidor remoto. Você gerou um par de chaves criptográficas robusto, distribuiu sua chave pública e, o mais importante, desabilitou logins baseados em senha menos seguros. Isso aumenta significativamente a segurança do seu servidor, tornando-o mais resistente a tentativas comuns de invasão.

Lembre-se sempre de proteger sua chave privada e sua senha vigilantemente, pois ela é agora a credencial principal para acessar seu servidor. Adote estas melhores práticas para manter uma postura de segurança forte para todas as suas necessidades de acesso remoto.