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:
- Seu cliente SSH apresenta sua chave pública ao servidor.
- O servidor verifica se essa chave pública está autorizada (ou seja, presente em seu arquivo
authorized_keys). - Se autorizada, o servidor envia um desafio para seu cliente.
- Seu cliente usa sua chave privada para criptografar o desafio e envia a resposta criptografada de volta ao servidor.
- 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 incluemrsa(por exemplo,ssh-keygen -t rsa -b 4096para uma chave RSA de 4096 bits).
Após executar o comando, você será solicitado com algumas perguntas:
- 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) eid_ed25519.pub(sua chave pública). - 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.
- 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(ouid_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(ouid_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_keysnos 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 arquivoauthorized_keys. - Auditorias Regulares: Revise periodicamente os arquivos
authorized_keysem 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.