Guia para Iniciantes em Chaves SSH: Gerar, Usar e Gerenciar com Segurança

Gere chaves SSH, copie chaves públicas para servidores, use ssh-agent e gerencie configurações SSH específicas de host com segurança.

Guia para Iniciantes sobre Chaves SSH: Gerar, Usar e Gerenciar com Segurança

As chaves SSH permitem que você faça login em servidores sem enviar uma senha reutilizável pela rede. Se você gerencia servidores Linux, instâncias em nuvem ou repositórios Git remotos, uma chave SSH devidamente protegida é geralmente mais segura e fácil do que o login baseado em senha.

Este guia para iniciantes mostra como gerar um par de chaves SSH, copiar a chave pública para um servidor, conectar-se com a chave privada correta e manter suas chaves gerenciáveis à medida que sua lista de servidores cresce.

Entendendo Pares de Chaves SSH

A autenticação por chave SSH depende de um par de chaves criptográficas: uma chave privada e uma chave pública. Essas chaves estão matematicamente ligadas, mas é computacionalmente inviável derivar a chave privada a partir da chave pública.

  • Chave Privada: Esta chave deve ser mantida em segredo e nunca deve ser compartilhada. Ela reside em sua máquina local e atua como sua identidade. Quando você inicia uma conexão SSH, seu cliente usa sua chave privada para provar sua identidade.
  • Chave Pública: Esta chave pode ser compartilhada livremente. Você colocará sua chave pública nos servidores remotos aos quais deseja acessar. Quando você tenta se conectar, o servidor usa sua chave pública para verificar se você possui a chave privada correspondente.

Quando você tenta se conectar a um servidor, ocorre o seguinte processo:

  1. Seu cliente SSH apresenta sua chave pública ao servidor.
  2. O servidor verifica se esta chave pública está autorizada (ou seja, presente em seu arquivo authorized_keys).
  3. Se autorizada, o servidor envia um desafio ao seu cliente.
  4. Seu cliente assina o desafio com sua chave privada e envia a assinatura de volta ao servidor.
  5. O servidor verifica a assinatura com sua chave pública. Se a assinatura for válida, a autenticação é concedida sem senha.

Gerando Pares de Chaves SSH

A ferramenta mais comum para gerar pares de chaves SSH é o ssh-keygen. Este comando está disponível na maioria dos sistemas Linux, macOS e Windows (via WSL ou Git Bash).

Usando ssh-keygen

Para gerar um novo par de chaves SSH, abra seu terminal ou prompt de comando e execute o seguinte comando:

ssh-keygen -t ed25519

Vamos detalhar este comando:

  • ssh-keygen: O comando para gerar chaves SSH.
  • -t ed25519: Especifica o tipo de chave a ser criada. ed25519 é um algoritmo moderno de criptografia de curva elíptica, altamente seguro e rápido. Outras opções comuns incluem rsa (por exemplo, ssh-keygen -t rsa -b 4096 para uma chave RSA de 4096 bits).

Ao executar o comando, você será solicitado a responder algumas perguntas:

  1. Digite o arquivo no qual salvar a chave (por exemplo, /home/seu_usuario/.ssh/id_ed25519): Pressione Enter para aceitar o local padrão. Isso criará dois arquivos em seu diretório .ssh: id_ed25519 (sua chave privada) e id_ed25519.pub (sua chave pública).
  2. Digite a frase secreta (vazio para nenhuma frase secreta): Este é um passo de segurança crucial. Inserir uma frase secreta criptografa sua chave privada no disco. Se o arquivo da sua chave privada for comprometido, o invasor ainda precisará da frase secreta para usá-la. É altamente recomendável usar uma frase secreta forte.
  3. Digite a mesma frase secreta novamente: Confirme sua frase secreta.

Entendendo os Arquivos de Saída

Após a geração, dois arquivos serão criados em seu diretório ~/.ssh/ (ou no caminho que você especificou):

  • id_ed25519 (ou id_rsa): Sua chave privada. NUNCA COMPARTILHE ESTE ARQUIVO. Restrinja suas permissões para somente leitura para seu usuário.
  • id_ed25519.pub (ou id_rsa.pub): Sua chave pública. Esta é a chave que você distribuirá para os servidores.

Protegendo Sua Chave Privada

É essencial garantir que sua chave privada tenha as permissões de arquivo corretas. No Linux/macOS, execute:

chmod 600 ~/.ssh/id_ed25519

Este comando restringe as permissões de leitura e gravação apenas ao proprietário do arquivo, impedindo que outros usuários no sistema acessem sua chave privada.

Implantando Sua Chave Pública em um Servidor

Depois de gerar seu par de chaves SSH, você precisa colocar sua chave pública no(s) servidor(es) remoto(s) aos quais deseja acessar.

Usando ssh-copy-id (Recomendado)

ssh-copy-id é um script utilitário que simplifica o processo de copiar sua chave pública para um servidor remoto. Ele anexa automaticamente sua chave pública ao arquivo ~/.ssh/authorized_keys no servidor e define as permissões corretas.

Para usar ssh-copy-id, execute o seguinte comando em sua máquina local:

ssh-copy-id usuario@host_remoto

Substitua usuario pelo seu nome de usuário no servidor remoto e host_remoto pelo endereço IP ou nome de host do servidor. Você será solicitado a fornecer a senha do usuario no host_remoto uma última vez para autorizar a transferência da chave.

Se você estiver usando uma porta SSH não padrão (por exemplo, 2222), pode especificá-la com a opção -p:

ssh-copy-id -p 2222 usuario@host_remoto

Implantação Manual (Se ssh-copy-id não estiver disponível)

Se ssh-copy-id não estiver disponível, você pode copiar manualmente sua chave pública. Primeiro, exiba o conteúdo da sua chave pública em sua máquina local:

cat ~/.ssh/id_ed25519.pub

Copie toda a saída. Em seguida, faça SSH em seu servidor remoto usando sua senha:

ssh usuario@host_remoto

Depois de fazer login, crie o diretório .ssh se ele não existir e, em seguida, crie ou anexe ao arquivo authorized_keys:

mkdir -p ~/.ssh
chmod 700 ~/.ssh

Agora, cole o conteúdo da sua chave pública no arquivo authorized_keys. Você pode fazer isso usando um editor de texto como nano ou vim:

nano ~/.ssh/authorized_keys

Cole a chave pública copiada em uma nova linha. Salve e saia do editor.

Finalmente, certifique-se de que o arquivo authorized_keys tenha as permissões corretas:

chmod 600 ~/.ssh/authorized_keys

Após concluir essas etapas, você deve conseguir fazer SSH no servidor sem senha.

Conectando-se com Chaves SSH

Depois que sua chave pública estiver no servidor, você pode se conectar usando sua chave privada. O cliente SSH tentará automaticamente usar as chaves encontradas em ~/.ssh/.

ssh usuario@host_remoto

Se você usou uma frase secreta durante a geração da chave, será solicitado a digitá-la agora. Se você não usou uma frase secreta, será logado diretamente.

Especificando uma Chave Diferente

Se você tiver vários pares de chaves SSH ou sua chave não estiver no local padrão, pode especificar qual chave privada usar com a opção -i:

ssh -i /caminho/para/sua/chave_privada usuario@host_remoto

Gerenciando Chaves SSH

À medida que você acessa mais servidores, acumulará mais chaves SSH. Um gerenciamento eficaz é fundamental para manter a segurança e a conveniência.

Agente SSH

O agente SSH é um programa em segundo plano que mantém suas chaves privadas na memória, descriptografadas com sua frase secreta. Isso permite que você use suas chaves para várias conexões SSH sem precisar digitar sua frase secreta cada vez.

  • Iniciando o Agente SSH: O agente geralmente é iniciado automaticamente quando você faz login em seu ambiente de desktop. Se não, você pode iniciá-lo manualmente:
    eval "$(ssh-agent -s)"
    
  • Adicionando Chaves ao Agente: Depois que o agente estiver em execução, adicione sua(s) chave(s) privada(s):
    ssh-add ~/.ssh/id_ed25519
    
    Você será solicitado a fornecer sua frase secreta. Após isso, o agente gerenciará a chave e as conexões SSH subsequentes a usarão automaticamente.

Arquivo de Configuração SSH (~/.ssh/config)

O arquivo de configuração do cliente SSH (~/.ssh/config) permite que você defina aliases para hosts e especifique parâmetros de conexão, incluindo qual chave usar para um host específico. Isso é extremamente útil para gerenciar vários servidores.

Crie ou edite o arquivo ~/.ssh/config em sua máquina local e adicione entradas como esta:

# Configurações padrão
Host *
  ServerAliveInterval 60

# Servidor 1: Servidor Web
Host webserver
  HostName 192.168.1.100
  User webadmin
  Port 2222
  IdentityFile ~/.ssh/webserver_key

# Servidor 2: Servidor de Banco de Dados
Host dbserver
  HostName db.example.com
  User dbuser
  IdentityFile ~/.ssh/db_key

Com esta configuração, você pode se conectar ao servidor web usando:

ssh webserver

E ao servidor de banco de dados usando:

ssh dbserver

O cliente SSH usará automaticamente o nome de usuário, porta e arquivo de chave privada corretos, conforme definido no arquivo ~/.ssh/config. Evite ativar ForwardAgent yes globalmente; o encaminhamento de agente é útil para alguns fluxos de trabalho de host de salto, mas expõe seu socket de agente ao host remoto enquanto a sessão estiver ativa.

Rotação e Revogação de Chaves

  • Rotação: Considere regularmente a rotação de suas chaves SSH, especialmente para sistemas altamente sensíveis. Isso envolve gerar novas chaves e substituir as chaves públicas antigas nos servidores.
  • Revogação: Se uma chave privada for comprometida ou você não precisar mais de acesso, deve remover a chave pública correspondente de todos os arquivos authorized_keys nos servidores onde foi implantada. Isso é crítico para manter a segurança.

Melhores Práticas e Dicas de Segurança

  • Use Frases Secretas: Sempre proteja suas chaves privadas com frases secretas fortes. Esta é sua principal defesa contra uso não autorizado se o arquivo da chave privada for roubado.
  • Permissões Seguras da Chave Privada: Certifique-se de que o arquivo da sua chave privada tenha permissões 600 (-rw-------).
  • Use ssh-agent: Aproveite o agente SSH para evitar digitar repetidamente sua frase secreta.
  • Desative a Autenticação por Senha: Depois que a autenticação por chave SSH estiver funcionando, considere desabilitar a autenticação baseada em senha em seus servidores para uma camada extra de segurança.
  • Mantenha as Chaves Atualizadas: Use algoritmos modernos e fortes como Ed25519. Evite chaves RSA mais antigas sem comprimento de bits suficiente (pelo menos 4096).
  • Esteja Atento ao authorized_keys: Adicione apenas chaves públicas de fontes confiáveis ao seu arquivo authorized_keys.
  • Auditorias Regulares: Revise periodicamente os arquivos authorized_keys em seus servidores para garantir que apenas chaves autorizadas estejam presentes.

Conclusão

Vale a pena configurar chaves SSH antes de precisar de acesso de emergência ao servidor. Gere uma chave moderna, proteja a chave privada com uma frase secreta, copie apenas a chave pública para os servidores e remova chaves obsoletas do authorized_keys quando o acesso mudar.