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.

37 visualizações

Como Gerar e Proteger Chaves SSH para Acesso Remoto

Secure Shell (SSH) é o protocolo padrão para conectar-se de forma segura a servidores e sistemas remotos. Embora a autenticação por senha seja comum, o uso de pares de chaves SSH oferece um método de autenticação significativamente mais forte, conveniente e resiliente. Este guia abrangente orienta você na geração de pares de chaves SSH robustos, na proteção deles com frases secretas (passphrases) e na utilização do ssh-agent para um acesso remoto seguro e contínuo.

Compreender o gerenciamento de chaves é crucial para manter a segurança da sua infraestrutura. Ao substituir senhas vulneráveis por chaves criptográficas, você mitiga os riscos associados a ataques de força bruta e credential stuffing, estabelecendo uma base sólida para a conectividade remota segura.

Entendendo 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 na sua máquina local e é usada para provar sua identidade ao servidor remoto.
  2. A Chave Pública: Esta chave é livremente compartilhada e carregada no 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 Certo

Ao gerar chaves, é essencial selecionar um algoritmo criptográfico moderno e forte. RSA ainda é amplamente utilizado, mas Ed25519 é frequentemente recomendado por sua velocidade e fortes garantias de segurança.

Passo 1: Gerando o Par de Chaves SSH

A ferramenta ssh-keygen é o utilitário 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. Nós especificamos o tipo de chave (-t ed25519) e fornecemos um comentário (-C) para ajudar a identificar a finalidade ou o proprietário da chave:

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

Quando solicitado:

  1. Insira o arquivo no qual salvar a chave: Pressione Enter para aceitar o local padrão (/home/user/.ssh/id_ed25519).
  2. Insira a frase secreta (recomendado): Sempre defina uma frase secreta forte. Isso criptografa sua chave privada, então mesmo que alguém roube o arquivo, eles não poderão usá-lo sem a frase secreta.

Gerando uma Chave RSA (Alternativa)

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

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

Arquivos de Saída da Chave

Após a geração, dois arquivos são criados no seu 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 na sua chave privada (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ções de permissão no servidor remoto. Você precisará se autenticar com uma senha pela última vez para esta configuração inicial.

ssh-copy-id user@remote_host_ip

Se for 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, você 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 <PASTE_YOUR_PUBLIC_KEY_HERE> pelo conteúdo real da chave
echo "<PASTE_YOUR_PUBLIC_KEY_HERE>" >> ~/.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 torna-se tedioso. O ssh-agent é um programa em segundo plano que armazena com segurança suas chaves privadas descriptografadas na memória, permitindo que você as use sem ter que digitar repetidamente a frase secreta.

Iniciando e Usando o 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:

    bash echo $SSH_AUTH_SOCK

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

    ```bash
    ssh-add ~/.ssh/id_ed25519

    Digite a frase secreta para /home/user/.ssh/id_ed25519: ****

    Identidade adicionada: /home/user/.ssh/id_ed25519 (comentário)

    ```

  3. Verifique as chaves carregadas:

    bash ssh-add -l

Agora, quando você executa ssh user@remote_host_ip, a conexão autenticará usando a chave mantida pelo agente sem pedir a frase secreta novamente (até que a sessão do agente termine).

Notas Importantes sobre o ssh-agent

  • Dependente da Sessão: As chaves carregadas no agente geralmente estão disponíveis apenas para a sessão atual do terminal ou sessão de login de desktop. Você precisará executar novamente ssh-add 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 logins baseados em senha inteiramente. 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:

    bash sudo nano /etc/ssh/sshd_config

  3. Encontre e defina as seguintes diretivas:

    ```config

    Certifique-se de que isso esteja definido como yes (geralmente padrão)

    PubkeyAuthentication yes

    Desabilita logins por senha

    PasswordAuthentication no
    ```

  4. Reinicie o serviço SSH para aplicar as alterações:

    ```bash
    sudo systemctl restart sshd # Para sistemas baseados em systemd (a maioria dos Linux modernos)

    OU

    sudo service ssh restart # Sistemas mais antigos
    ```

Aviso: Antes de desabilitar a autenticação por senha, certifique-se de ter feito login com sucesso pelo menos uma vez usando sua nova chave. Trancar-se para fora devido a um erro de configuração é um erro comum, recuperável, mas que requer acesso via console ou acesso alternativo.

Resumo e Próximos Passos

Gerar e gerenciar chaves SSH é uma habilidade fundamental para a administração segura de sistemas. Ao seguir estas etapas — gerar chaves Ed25519 modernas, proteger a chave privada com uma frase secreta forte, instalar com segurança a chave pública em servidores de destino e alavancar o ssh-agent — você estabelece um mecanismo de autenticação altamente seguro e eficiente.

Próximos Passos:

  • Gere um par de chaves exclusivo para cada sistema ou serviço principal que você acessa.
  • Audite regularmente o arquivo authorized_keys em servidores críticos.
  • Use frases secretas diferentes para diferentes pares de chaves, se possível, ou pelo menos garanta que sejam complexas.