Como configurar a autenticação SSH por chave pública (Windows/Linux)

Visão geral

Este artigo explica como configurar o lado do cliente para autenticação SSH por chave pública, permitindo conexões seguras com servidores. Os procedimentos abordam tanto Windows quanto Linux.

Pré-requisitos

  • O cliente SSH já está instalado (padrão no Windows 10+ e em todas as distribuições Linux modernas)
  • O servidor SSH está configurado para aceitar autenticação por chave pública
  • Existe um usuário válido no servidor

Tipos de chaves e algoritmos

Os principais tipos de chaves usados no SSH são RSA, ECDSA e Ed25519. A tabela abaixo compara suas características, desempenho e compatibilidade.

Tipo de chave Características Uso recomendado Compatibilidade
RSA Amplamente usado; comprimento configurável Sistemas legados ou de alta compatibilidade Muito alta
ECDSA Baseado em curva elíptica; mais rápido com chaves menores Ambientes que priorizam desempenho Média
Ed25519 Novo padrão; rápido e altamente seguro Ambientes modernos e de alta segurança Alta (OpenSSH ≥ 6.5)

Ed25519 é atualmente o padrão recomendado. RSA ainda é amplamente usado, especialmente em ambientes antigos ou compatíveis com FIPS. ECDSA é intermediário entre os dois.

Convenções de variáveis

Valores dependentes do ambiente são representados por variáveis. Substitua conforme sua configuração.

Variável Exemplo Descrição
<<USERNAME>> exampleuser Usuário local (cliente)
<<SERVER>> 192.168.1.10 Endereço do servidor ou IP
<<USER>> ubuntu ou ec2-user Usuário do servidor
<<EMAIL_ADDRESS>> user@example.com E-mail opcional para o comentário da chave

Observação (Windows)

Todos os comandos do Windows neste artigo presumem o uso do PowerShell.
Se usar o Prompt de Comando (cmd.exe), substitua $env:USERPROFILE por %USERPROFILE%.

Cliente Windows

Etapa 1: Gerar o par de chaves

Abra o PowerShell como administrador e execute:

ssh-keygen -t ed25519 -C "<<EMAIL_ADDRESS>>"

Saída esperada:

Generating public/private ed25519 key pair.
Enter file in which to save the key (/C:/Users/<<USERNAME>>/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Your identification has been saved in /C:/Users/<<USERNAME>>/.ssh/id_ed25519
Your public key has been saved in /C:/Users/<<USERNAME>>/.ssh/id_ed25519.pub

Chave pública: $env:USERPROFILE\.ssh\id_ed25519.pub
Chave privada: $env:USERPROFILE\.ssh\id_ed25519

Etapa 2: Copiar a chave pública para o servidor

cat $env:USERPROFILE\.ssh\id_ed25519.pub | ssh <<USER>>@<<SERVER>> "mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys"

Ou copie manualmente o conteúdo do .pub para ~/.ssh/authorized_keys no servidor.

Etapa 3: Testar conexão

ssh -i $env:USERPROFILE\.ssh\id_ed25519 <<USER>>@<<SERVER>>

Cliente Linux

Etapa 1: Gerar o par de chaves

ssh-keygen -t ed25519 -C "<<EMAIL_ADDRESS>>"

Chave pública: ~/.ssh/id_ed25519.pub
Chave privada: ~/.ssh/id_ed25519

Etapa 2: Registrar a chave no servidor

ssh-copy-id -i ~/.ssh/id_ed25519.pub <<USER>>@<<SERVER>>

Ou copie manualmente o conteúdo da chave pública para ~/.ssh/authorized_keys.

Etapa 3: Testar conexão

ssh -i ~/.ssh/id_ed25519 <<USER>>@<<SERVER>>

Usando chaves com frase secreta

Se a chave tiver uma passphrase, use o agente SSH para evitar digitação repetida.

Etapa 1: Iniciar o agente SSH

Windows:

Set-Service -Name ssh-agent -StartupType Manual
Start-Service ssh-agent

Linux:

eval "$(ssh-agent -s)"

Início automático

Windows:

Set-Service -Name ssh-agent -StartupType Automatic

Linux:
Adicione ao ~/.bashrc:

eval "$(ssh-agent -s)" > /dev/null

Etapa 2: Registrar a chave

Windows:

ssh-add $env:USERPROFILE\.ssh\id_ed25519

Linux:

ssh-add ~/.ssh/id_ed25519

Etapa 3: Confirmar registro

ssh-add -l

Arquivo de configuração do cliente (config)

Para simplificar conexões, crie ~/.ssh/config (ou C:\Users\<<USERNAME>>\.ssh\config no Windows).

Exemplo

Host myserver
    HostName <<SERVER>>
    User <<USER>>
    IdentityFile ~/.ssh/id_ed25519
    Port 22

Após isso, basta executar:

ssh myserver

Gerencie múltiplos servidores adicionando várias seções Host.


Verificação e depuração

Use modo detalhado para depurar autenticação:

ssh -vvv -i ~/.ssh/id_ed25519 <<USER>>@<<SERVER>>

Procure por Authentication succeeded (publickey) na saída.


Solução de problemas

Principais causas de falha:

  1. Autenticação por chave desativada no servidor
  2. Chave incorreta ou não registrada em authorized_keys
  3. Erro em usuário, permissão ou host

Conclusão

A autenticação SSH por chave pública oferece conexões seguras sem senha.
Com ssh-keygen e uma configuração correta de permissões, é possível implementar facilmente o método em Windows e Linux.