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

Desbloqueie o acesso remoto seguro e sem senha com chaves SSH. Este guia para iniciantes aborda a geração de pares de chaves SSH usando `ssh-keygen`, a implantação delas em servidores com `ssh-copy-id` e o gerenciamento eficaz de chaves com `ssh-agent` e arquivos de configuração. Aprenda as melhores práticas para aprimorar a segurança do seu servidor e otimizar as conexões.

42 visualizações

Guia para Iniciantes em Chaves SSH: Gere, Use e Gerencie com Segurança

O Secure Shell (SSH) é o padrão de fato para acesso remoto seguro a servidores e outros dispositivos de rede. Embora a autenticação baseada em senha seja comum, ela pode ser vulnerável a ataques de força bruta e exige a memorização de senhas complexas. As chaves SSH oferecem uma alternativa mais robusta e conveniente, permitindo autenticação sem senha e melhorando sua postura geral de segurança.

Este guia o guiará pelas etapas essenciais de geração, implantação e gerenciamento de pares de chaves SSH. Ao entender e implementar essas práticas, você pode melhorar significativamente a segurança do seu acesso remoto e otimizar seu fluxo de trabalho. Abordaremos os conceitos centrais, comandos práticos e as melhores práticas para você começar com a autenticação por chaves SSH.

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 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. Ao tentar se conectar, o servidor usa sua chave pública para verificar se você possui a chave privada correspondente.

Ao tentar se conectar a um servidor, o seguinte processo ocorre:

  1. Seu cliente SSH apresenta sua chave pública ao servidor.
  2. O servidor verifica se essa chave pública está autorizada (ou seja, presente em seu arquivo authorized_keys).
  3. Se autorizada, o servidor envia um desafio para seu cliente.
  4. Seu cliente usa sua chave privada para criptografar o desafio e envia a resposta criptografada de volta ao servidor.
  5. O servidor descriptografa a resposta usando sua chave pública. Se a descriptografia for bem-sucedida e corresponder ao desafio original, a autenticação é concedida sem a necessidade de 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 de criptografia de curva elíptica moderno, 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).

Após executar o comando, você será solicitado com algumas perguntas:

  1. Digite o arquivo onde 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 (em branco para nenhuma frase secreta): Este é um passo de segurança crucial. Digitar uma frase secreta criptografa sua chave privada no disco. Se o seu arquivo de chave privada for comprometido, o invasor ainda precisará da frase secreta para usá-lo. É 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 que apenas o proprietário do arquivo possa ler.
  • 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 escrita apenas ao proprietário do arquivo, impedindo que outros usuários do 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 nos servidores remotos que deseja acessar.

Usando ssh-copy-id (Recomendado)

ssh-copy-id é um script utilitário que simplifica o processo de cópia de 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 o ssh-copy-id, execute o seguinte comando de sua máquina local:

ssh-copy-id usuario@servidor_remoto

Substitua usuario pelo seu nome de usuário no servidor remoto e servidor_remoto pelo endereço IP ou nome de host do servidor. Você será solicitado a senha do usuario no servidor_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@servidor_remoto

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

Se o 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, conecte-se via SSH ao seu servidor remoto usando sua senha:

ssh usuario@servidor_remoto

Uma vez logado, 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 sua chave pública copiada em uma nova linha. Salve e saia do editor.

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

chmod 600 ~/.ssh/authorized_keys

Após concluir essas etapas, você deverá conseguir se conectar via SSH ao servidor sem senha.

Conectando com Chaves SSH

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

ssh usuario@servidor_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á conectado diretamente.

Especificando uma Chave Diferente

Se você tiver vários pares de chaves SSH ou se 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@servidor_remoto

Gerenciando Chaves SSH

À medida que você acessa mais servidores, acumulará mais chaves SSH. O 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 repetidamente.

  • 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:
    bash eval "$(ssh-agent -s)"
  • Adicionando Chaves ao Agente: Uma vez que o agente esteja em execução, adicione suas chaves privadas:
    bash ssh-add ~/.ssh/id_ed25519
    Você será solicitado a digitar 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 definir aliases para hosts e especificar parâmetros de conexão, incluindo qual chave usar para um host específico. Isso é incrivelmente ú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 *
  ForwardAgent yes
  ServerAliveInterval 60

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

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

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

ssh servidorweb

E ao servidor de banco de dados usando:

ssh servidordb

O cliente SSH usará automaticamente o nome de usuário, porta e arquivo de chave privada corretos, conforme definido no arquivo ~/.ssh/config.

Rotação e Revogação de Chaves

  • Rotação: Considere rotacionar suas chaves SSH regularmente, 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, deverá remover a chave pública correspondente de todos os arquivos authorized_keys nos servidores em que foi implantada. Isso é fundamental 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 o uso não autorizado caso o arquivo de chave privada seja roubado.
  • Proteja Permissões da Chave Privada: Certifique-se de que seu arquivo de chave privada tenha permissões 600 (-rw-------).
  • Use ssh-agent: Utilize o agente SSH para evitar digitar sua frase secreta repetidamente.
  • Desabilite a Autenticação por Senha: Uma vez que a autenticação por chave SSH esteja 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 antigas sem um comprimento de bits suficiente (pelo menos 4096).
  • Tenha Cuidado com 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

As chaves SSH são uma ferramenta poderosa para aprimorar a segurança e a conveniência do gerenciamento remoto de servidores. Ao dominar a geração, implantação e gerenciamento de pares de chaves SSH usando ferramentas como ssh-keygen e ssh-copy-id, você pode ir além da autenticação baseada em senha e estabelecer um fluxo de trabalho de acesso remoto mais seguro e eficiente. Lembre-se de priorizar a segurança usando frases secretas fortes e protegendo suas chaves privadas.