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:
- 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.
- A Chave Pública: Esta chave é livremente compartilhada e carregada no arquivo
~/.ssh/authorized_keysno(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:
- Insira o arquivo no qual salvar a chave: Pressione Enter para aceitar o local padrão (
/home/user/.ssh/id_ed25519). - 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(ouid_rsa): Sua Chave Privadaid_ed25519.pub(ouid_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
-
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 -
Adicione sua chave ao agente: Use o comando
ssh-addpara carregar sua chave privada. Você será solicitado pela frase secreta apenas uma vez.```bash
ssh-add ~/.ssh/id_ed25519Digite a frase secreta para /home/user/.ssh/id_ed25519: ****
Identidade adicionada: /home/user/.ssh/id_ed25519 (comentário)
```
-
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-addapó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_ed25519manté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.
- Conecte-se ao seu servidor via SSH usando sua chave.
-
Edite o arquivo de configuração do daemon SSH, geralmente localizado em
/etc/ssh/sshd_config:bash sudo nano /etc/ssh/sshd_config -
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
``` -
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_keysem servidores críticos. - Use frases secretas diferentes para diferentes pares de chaves, se possível, ou pelo menos garanta que sejam complexas.