Como Gerar e Proteger Chaves SSH para Acesso Remoto

Domine o acesso remoto seguro aprendendo a gerar pares de chaves SSH robustos usando `ssh-keygen`. Este guia aborda as melhores práticas para selecionar tipos de chave (Ed25519), proteger sua chave privada com uma passphrase, implantar eficientemente a chave pública usando `ssh-copy-id` e utilizar `ssh-agent` para autenticação contínua. Garanta que sua infraestrutura esteja protegida contra ataques de força bruta implementando controle de acesso baseado em chaves.

Como Gerar e Proteger Chaves SSH para Acesso Remoto

O Secure Shell (SSH) é a forma padrão de se conectar a servidores remotos. Se você ainda usa senhas para acesso diário, as chaves SSH oferecem autenticação mais forte e eliminam o risco de tentativas de adivinhação de senha contra essa conta.

Este guia mostra como gerar chaves SSH, proteger a chave privada com uma frase secreta, instalar a chave pública em um servidor e usar ssh-agent para não precisar digitar a frase secreta em cada conexão.

Entendendo os Pares de Chaves SSH

Um par de chaves SSH consiste em dois componentes distintos:

  1. A Chave Privada: Esta chave nunca deve ser compartilhada. Ela permanece segura em sua máquina local e é usada para provar sua identidade ao servidor remoto.
  2. A Chave Pública: Esta chave é compartilhada livremente e enviada para o arquivo ~/.ssh/authorized_keys no(s) servidor(es) remoto(s) que você deseja acessar. O servidor usa esta chave para verificar a assinatura gerada pela sua chave privada.

Escolhendo o Algoritmo Correto

Ao gerar chaves, escolha um algoritmo moderno. Ed25519 é uma boa opção padrão para clientes OpenSSH atuais, pois é rápido, compacto e amplamente suportado. O RSA ainda funciona e é útil quando você precisa se conectar a sistemas mais antigos que não suportam Ed25519.

Passo 1: Gerando o Par de Chaves SSH

O utilitário ssh-keygen é a ferramenta padrão para criar pares de chaves SSH no Linux, macOS e Windows (via Git Bash ou WSL).

Gerando uma Chave Ed25519 (Recomendado)

Para criar uma chave Ed25519 moderna, use o seguinte comando. Especificamos o tipo de chave (-t ed25519) e fornecemos um comentário (-C) para ajudar a identificar o propósito ou proprietário da chave:

ssh-keygen -t ed25519 -C "[email protected]_ou_nome_do_host"

Quando solicitado:

  1. Arquivo no qual salvar a chave: Pressione Enter para aceitar o local padrão (/home/usuario/.ssh/id_ed25519).
  2. Frase secreta (recomendado): Defina uma frase secreta forte para chaves usadas fora de sistemas de laboratório descartáveis. Isso criptografa sua chave privada, de modo que um arquivo de chave roubado não seja imediatamente utilizável.

Gerando uma Chave RSA (Alternativa)

Se a compatibilidade com sistemas muito antigos for necessária, você pode gerar uma chave RSA, garantindo a especificação de um comprimento de chave suficiente (pelo menos 4096 bits):

ssh-keygen -t rsa -b 4096 -C "seu_comentario_chave_rsa"

Arquivos de Saída da Chave

Após a geração, dois arquivos são criados no diretório ~/.ssh/ (assumindo os padrões):

  • id_ed25519 (ou id_rsa): Sua Chave Privada
  • id_ed25519.pub (ou id_rsa.pub): Sua Chave Pública

Melhor prática de segurança: Nunca compartilhe o arquivo sem a extensão .pub. Defina permissões restritivas em sua chave privada com chmod 600 ~/.ssh/id_ed25519.

Passo 2: Copiando a Chave Pública para o Servidor

O servidor remoto deve ter sua chave pública no arquivo ~/.ssh/authorized_keys para conceder acesso.

Usando ssh-copy-id (O Método Mais Fácil)

O utilitário ssh-copy-id automatiza o processo, lidando com a criação de diretórios e configuração de permissões no servidor remoto. Você precisará autenticar com uma senha pela última vez para esta configuração inicial.

ssh-copy-id usuario@endereco_ip_remoto

Se bem-sucedido, o comando informará que as chaves foram adicionadas. Agora você pode tentar fazer login.

Cópia Manual (Se ssh-copy-id Não Estiver Disponível)

Se você não puder usar ssh-copy-id, pode anexar manualmente o conteúdo da chave pública. Primeiro, exiba a chave pública:

cat ~/.ssh/id_ed25519.pub

Em seguida, faça login no servidor remoto usando sua senha e anexe a saída ao arquivo authorized_keys:

# No servidor remoto
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# Substitua <COLE_SUA_CHAVE_PUBLICA_AQUI> pelo conteúdo real da chave
echo "<COLE_SUA_CHAVE_PUBLICA_AQUI>" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Passo 3: Protegendo o Acesso com ssh-agent

Digitar sua frase secreta toda vez que você se conecta a um servidor se torna tedioso. O ssh-agent é um programa em segundo plano que mantém suas chaves privadas descriptografadas na memória de forma segura, permitindo que você as use sem inserir repetidamente a frase secreta.

Iniciando e Usando ssh-agent

  1. Certifique-se de que o agente está em execução: Na maioria dos sistemas Linux/macOS modernos, o agente inicia automaticamente quando você faz login. Você pode verificar seu status procurando pelas variáveis de ambiente:

    echo $SSH_AUTH_SOCK
    
  2. Adicione sua chave ao agente: Use o comando ssh-add para carregar sua chave privada. Você será solicitado a fornecer a frase secreta apenas uma vez.

    ssh-add ~/.ssh/id_ed25519
    # Digite a frase secreta para /home/usuario/.ssh/id_ed25519: **********
    # Identidade adicionada: /home/usuario/.ssh/id_ed25519 (comentário)
    
  3. Verifique as chaves carregadas:

    ssh-add -l
    

Agora, quando você executar ssh usuario@endereco_ip_remoto, a conexão será autenticada usando a chave mantida pelo agente sem solicitar a frase secreta novamente (até que a sessão do agente termine).

Notas Importantes sobre ssh-agent

  • Dependente da Sessão: As chaves carregadas no agente geralmente estão disponíveis apenas para a sessão de terminal atual ou sessão de login da área de trabalho. Você precisará executar ssh-add novamente após sair e entrar novamente.
  • Tempo de Vida da Chave: Você pode definir um tempo de vida máximo para as chaves mantidas no agente usando a flag -t (por exemplo, ssh-add -t 1h ~/.ssh/id_ed25519 mantém a chave carregada por uma hora).

Segurança Avançada: Desabilitando a Autenticação por Senha

Depois de confirmar que a autenticação baseada em chave funciona perfeitamente em todos os servidores necessários, a medida de segurança mais forte é desabilitar completamente os logins baseados em senha. Isso evita ataques de força bruta contra senhas.

  1. Conecte-se ao seu servidor via SSH usando sua chave.

  2. Edite o arquivo de configuração do daemon SSH, geralmente localizado em /etc/ssh/sshd_config:

    sudo nano /etc/ssh/sshd_config
    
  3. Encontre e defina as seguintes diretivas:

    # Certifique-se de que isso esteja definido como yes (geralmente o padrão)
    PubkeyAuthentication yes
    
    # Desabilite logins por senha
    PasswordAuthentication no
    
  4. Verifique a configuração antes de reiniciar:

    sudo sshd -t
    
  5. Reinicie o serviço SSH para aplicar as alterações. O nome do serviço é comumente sshd em sistemas da família RHEL e ssh no Debian/Ubuntu:

    sudo systemctl restart sshd
    # ou
    sudo systemctl restart ssh
    

Aviso: Antes de desabilitar a autenticação por senha, mantenha uma sessão SSH ativa aberta e confirme que um segundo login funciona com a nova chave. Se a reinicialização falhar ou a chave estiver errada, você precisará de acesso ao console ou fora de banda.

Próximos Passos

Após seu primeiro login baseado em chave funcionar, trate as chaves SSH como credenciais de produção:

  • Gere um par de chaves único para cada sistema ou serviço importante que você acessa.
  • Audite regularmente o arquivo authorized_keys em servidores críticos.
  • Remova chaves antigas quando pessoas mudarem de função ou máquinas forem desativadas.
  • Use ssh-add -t para sessões de agente de curta duração em estações de trabalho compartilhadas.