Módulo 1 · 1.3
O primeiro início de sessão por SSH
Módulo 1: O seu primeiro servidor · Tempo de leitura: 10 minutos
Objetivo de aprendizagem: Depois desta lição, consegue iniciar sessão no seu servidor por SSH pela primeira vez, verificar a impressão digital do servidor antes de confiar nele e saber o que fazer quando surge o aviso de que a identidade do servidor mudou.
Conceitos-chave: SSH, cliente e servidor, porta 22, banner de versão, host key, impressão digital (SHA256), known_hosts, trust on first use, "REMOTE HOST IDENTIFICATION HAS CHANGED", PowerShell e Terminal
O que é o SSH
O SSH (Secure Shell) é a ligação cifrada com que gere um servidor à distância. Escreve no seu próprio computador e os comandos são executados no servidor. Tudo o que passa pela ligação, incluindo a sua palavra-passe, é cifrado.
Existem dois lados:
- o cliente SSH no seu próprio computador: o programa
ssh. No macOS e no Linux vem incluído de origem. No Windows 10 (a partir da versão 1809) e no Windows 11, o cliente OpenSSH faz parte do Windows; utiliza-o no PowerShell ou no Windows Terminal. Se não estiver presente, pode adicioná-lo em Definições, Funcionalidades opcionais, "Cliente OpenSSH". Programas com janelas, como o PuTTY, também funcionam, mas neste curso utilizamos ossh. - o servidor SSH no VPS: o programa
sshd(do OpenSSH). Por predefinição, escuta na porta 22.
Iniciar sessão
Inicia sessão com um nome de utilizador e o endereço do servidor:
PS C:\Users\anna> ssh root@192.0.2.10Ou com um nome, se o tiver configurado no DNS (lição 7.1):
anna@laptop:~$ ssh root@web1.example.comNa primeira vez, verá algo como isto:
The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?Este é o momento mais importante desta lição. Não escreva yes às cegas.
A host key e a impressão digital
Cada servidor SSH tem uma ou mais host keys: pares de chaves com que o servidor prova quem é. As partes públicas encontram-se no servidor em /etc/ssh/, por exemplo /etc/ssh/ssh_host_ed25519_key.pub. Em cada ligação, o servidor demonstra que possui a parte secreta.
Uma impressão digital é um resumo curto (um hash) de uma dessas chaves públicas. Por predefinição, o OpenSSH mostra a forma SHA256: SHA256: seguido de 43 caracteres.
A pergunta "Are you sure you want to continue connecting?" significa: o seu computador ainda não conhece este servidor. Quem garante que está a comunicar com o seu VPS e não com alguém que interceta o tráfego? Ninguém, a menos que compare a impressão digital com uma fonte fiável.
Essa fonte é a consola do seu fornecedor (lição 1.2). Aí não comunica com o servidor através da rede. Inicie sessão na consola e consulte a impressão digital:
root@web1:~# ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs root@web1 (ED25519)Se corresponder exatamente ao que o cliente mostra, escreva yes. Também pode colar a própria impressão digital em vez de yes; nesse caso, o ssh faz a comparação por si. Se for diferente, pare e investigue a causa (endereço IP errado, servidor reinstalado ou algo mais grave).
Tenha atenção ao tipo: o cliente indica o tipo (ED25519, ECDSA ou RSA). Compare a impressão digital do mesmo tipo. Muitas imagens também mostram as impressões digitais na consola no primeiro arranque (cloud-init), entre linhas como BEGIN SSH HOST KEY FINGERPRINTS.
known_hosts e trust on first use
Se escrever yes, verá:
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.O cliente guarda a chave em ~/.ssh/known_hosts (no Windows, C:\Users\<naam>\.ssh\known_hosts). A partir daí, compara-a automaticamente em cada ligação. Este modelo chama-se trust on first use (TOFU, confiança na primeira utilização): na primeira vez tem de verificar pessoalmente; depois, é o cliente que vigia.
É por isso que essa primeira verificação é tão importante: se confiar numa chave errada, o cliente nunca mais o avisará.
Se trabalhar num computador com Debian ou Ubuntu, os nomes em known_hosts ficam, por predefinição, em forma de hash (HashKnownHosts yes em /etc/ssh/ssh_config), pelo que não verá aí endereços IP legíveis. No Windows e no macOS ficam legíveis. Pesquisar funciona em todo o lado com:
anna@laptop:~$ ssh-keygen -F 192.0.2.10
# Host 192.0.2.10 found: line 3
|1|kP9...= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA..."REMOTE HOST IDENTIFICATION HAS CHANGED"
Por vezes, verá este aviso:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
...
Host key verification failed.O servidor apresenta uma chave diferente daquela que o seu cliente conhece. Nesse caso, o ssh recusa-se a ligar. Existem dois tipos de causas:
| Normal | Suspeito |
|---|---|
| Reinstalou o VPS (novas host keys) | Não alterou nada e, mesmo assim, a chave é diferente |
| O endereço IP foi atribuído a outro servidor | Está ligado a uma rede Wi-Fi desconhecida |
| Substituiu as host keys de propósito | A impressão digital na consola difere da que o cliente vê agora |
Se houver uma explicação normal, verifique novamente a impressão digital na consola e só depois remova a linha antiga:
anna@laptop:~$ ssh-keygen -R 192.0.2.10
# Host 192.0.2.10 found: line 3
/home/anna/.ssh/known_hosts updated.Na ligação seguinte, voltará a ver a pergunta da primeira vez e voltará a verificar. Nunca defina StrictHostKeyChecking no nas suas definições para fazer desaparecer o aviso: estaria a desativar precisamente a proteção que interessa.
O banner de versão
Antes de qualquer cifragem, o cliente e o servidor enviam um ao outro uma linha de texto: o banner de versão. É visível para qualquer pessoa na internet. Pode vê-lo com ssh -v:
anna@laptop:~$ ssh -v root@192.0.2.10 2>&1 | grep "remote software"
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.6p1 Ubuntu-3ubuntu13.5Aqui, o servidor indica que protocolo (2.0) e que software utiliza. O Debian e o Ubuntu acrescentam a versão do pacote. Não se trata de um segredo que deva esconder: os atacantes experimentam tudo de qualquer forma, e a proteção vem das atualizações (módulo 4), não de um banner diferente. Ainda assim, é útil: pelo banner consegue ver do exterior se o seu servidor está realmente a executar a versão atualizada.
Em AlmaLinux e Rocky Linux
O início de sessão e as impressões digitais funcionam da mesma forma. O serviço chama-se sshd em vez de ssh (systemctl status sshd). O banner não contém o nome da distribuição, apenas a versão do OpenSSH.
Resumo
- O SSH é a ligação cifrada ao seu servidor;
sshé o cliente esshdo servidor na porta 22. - Na primeira ligação, o cliente mostra a impressão digital da host key. Compare-a com o resultado de
ssh-keygen -lfna consola antes de escreveryes. - O cliente guarda a chave em
~/.ssh/known_hostse passa a avisar por si próprio (trust on first use). - "REMOTE HOST IDENTIFICATION HAS CHANGED" é normal após uma reinstalação; caso contrário, é suspeito. Remova uma linha antiga apenas depois de verificar, com
ssh-keygen -R. - O banner de versão é público; a proteção vem das atualizações, não de o esconder.
Questionário
Exercício
Exercício Z1.3: Banner SSH e impressão digital do seu servidor. Introduza o endereço do seu servidor, a versão do software indicada no banner (como OpenSSH_9.6p1) e a impressão digital ED25519 que consultou na consola com ssh-keygen -lf. O programa estabelece uma única ligação à sua porta SSH, lê o banner e a host key e faz a comparação. Não inicia sessão.
Para saber mais
- Iniciar sessão no seu VPS com SSH (e criar uma chave SSH)
- Deixou de ter acesso ao seu VPS: o que fazer?
- ssh-keygen(1), opções -l, -F e -R: https://manpages.debian.org/trixie/openssh-client/ssh-keygen.1.en.html
- ssh_config(5), StrictHostKeyChecking, FingerprintHash e HashKnownHosts: https://manpages.debian.org/trixie/openssh-client/ssh_config.5.en.html
- RFC 4253, secção 4.2 (o banner de versão): https://www.rfc-editor.org/rfc/rfc4253.html
- VPS: do primeiro início de sessão a um servidor seguro 2.1: Iniciar sessão com SSH pela primeira vez
