Um par de chaves é muito mais seguro do que uma palavra-passe: a chave privada nunca sai do seu PC e os bots que varrem a porta 22 não a conseguem adivinhar. O Windows 10 e o 11 já incluem o OpenSSH, por isso vai criar uma chave, instalá-la no seu VPS Linux Infrawire, mantê-la carregada no serviço ssh-agent do Windows e, por fim, desativar os acessos por palavra-passe.
📋 Pré-requisitos
- Windows 10 ou 11 com o cliente OpenSSH (verifique com
ssh -Vno PowerShell). - Um VPS Linux (Ubuntu 24.04, Debian 12, AlmaLinux 9 ou Rocky 9) onde ainda consiga entrar com palavra-passe: na sua área de cliente encontra o IP e a palavra-passe root do VPS.
- Cerca de dez minutos e uma segunda sessão SSH ou a consola do VPS como rede de segurança.
PowerShellssh -V
🔐 Gerar uma chave ed25519
Abra o PowerShell (normal, não de administrador) e execute:
PowerShellssh-keygen -t ed25519 -C 'USER@my-pc'
Aceite o caminho predefinido C:\Users\USER\.ssh\id_ed25519 e introduza uma frase-passe. Ela cifra a chave privada no disco, pelo que um ficheiro roubado fica inútil. São criados dois ficheiros: id_ed25519 (privado, nunca o partilhe) e id_ed25519.pub (público).
📤 Copiar a chave pública para o VPS
O Windows não tem ssh-copy-id, por isso instale a chave manualmente. Primeiro mostre a chave pública e copie a linha completa:
PowerShellGet-Content $env:USERPROFILE\.ssh\id_ed25519.pub
Ligue-se com a sua palavra-passe e acrescente essa linha no servidor (substitua o texto de exemplo pela sua chave real, entre as aspas simples):
Bashssh root@VPS_IP mkdir -p ~/.ssh && chmod 700 ~/.ssh echo 'ssh-ed25519 AAAA...your-key... USER@my-pc' >> ~/.ssh/authorized_keys sed -i 's/\r$//' ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
A linha sed remove qualquer fim de linha do Windows que tornaria a chave ilegível. Não use pipes do PowerShell para o ssh nesta tarefa: o Windows PowerShell 5.1 pode acrescentar retornos de carro aos dados.
🧰 Ativar o ssh-agent no Windows
Sem agente, tem de escrever a frase-passe em cada ligação. O serviço ssh-agent vem instalado, mas desativado ou em arranque manual por predefinição. Num PowerShell de administrador:
PowerShellGet-Service ssh-agent | Set-Service -StartupType Automatic Start-Service ssh-agent Get-Service ssh-agent
Depois, num PowerShell normal, carregue a chave uma vez e liste as chaves carregadas:
PowerShellssh-add $env:USERPROFILE\.ssh\id_ed25519 ssh-add -l
O agente guarda a chave após reiniciar, por isso não voltará a ser pedida.
✅ Testar o acesso por chave
Ligue-se de novo. Deve obter uma shell sem que o servidor peça a palavra-passe de root:
PowerShellssh root@VPS_IP
Para ver exatamente o método usado, acrescente -v e procure Server accepts key e Authenticated to ... using publickey:
PowerShellssh -v root@VPS_IP
Não avance enquanto isto não funcionar e mantenha esta sessão aberta.
🚫 Desativar a autenticação por palavra-passe no servidor
Em Ubuntu e Debian, /etc/ssh/sshd_config.d/ pode já conter um ficheiro (como 50-cloud-init.conf) que ativa palavras-passe. O SSH usa o primeiro valor que lê, por isso crie um ficheiro que fique ordenado antes. Execute como root no VPS:
Bashgrep -ri 'PasswordAuthentication' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ cat > /etc/ssh/sshd_config.d/10-keys-only.conf <<'EOF' PasswordAuthentication no KbdInteractiveAuthentication no PubkeyAuthentication yes PermitRootLogin prohibit-password EOF sshd -t && systemctl reload ssh
Em AlmaLinux/Rocky o serviço chama-se sshd: use systemctl reload sshd. Confirme que o sshd_config principal contém a linha Include /etc/ssh/sshd_config.d/*.conf perto do início (é o habitual). O sshd -t não escreve nada quando a sintaxe é válida.
Numa janela nova, confirme que as palavras-passe são agora recusadas e que a sua chave continua a funcionar:
PowerShellssh -o PubkeyAuthentication=no root@VPS_IP
A resposta esperada é Permission denied (publickey).
🛠️ Resolução de problemas
Permission denied (publickey). A chave não está no authorized_keys da conta certa, foi colada em várias linhas ou as permissões estão erradas. No servidor, execute chmod 700 ~/.ssh e chmod 600 ~/.ssh/authorized_keys e verifique se a linha começa por ssh-ed25519.
WARNING: UNPROTECTED PRIVATE KEY FILE. Outras contas do Windows conseguem ler a sua chave privada. Restrinja-a ao seu utilizador:
PowerShellicacls $env:USERPROFILE\.ssh\id_ed25519 /inheritance:r /grant:r "${env:USERNAME}:F"
Error connecting to agent: No such file or directory. O serviço ssh-agent não está em execução; inicie-o como indicado acima.
Bloqueado após a alteração. Use a consola do VPS na sua área de cliente, remova /etc/ssh/sshd_config.d/10-keys-only.conf, execute sshd -t e recarregue o serviço SSH.
🚀 O seu PC Windows entra agora no VPS com uma chave ed25519 e as palavras-passe estão desativadas. Guarde uma cópia da chave privada num local seguro.