Modulul 1 · 1.3
Prima autentificare SSH
Modulul 1: Primul dumneavoastră server · Timp de citire: 10 minute
Obiectivul lecției: După această lecție vă puteți conecta pentru prima dată prin SSH la serverul dumneavoastră, puteți verifica amprenta serverului înainte de a avea încredere în el și știți ce trebuie să faceți la avertismentul că identitatea serverului s-a schimbat.
Noțiuni cheie: SSH, client și server, portul 22, banner de versiune, host key, amprentă (SHA256), known_hosts, trust on first use, "REMOTE HOST IDENTIFICATION HAS CHANGED", PowerShell și Terminal
Ce este SSH
SSH (Secure Shell) este conexiunea criptată prin care administrați un server de la distanță. Tastați pe propriul calculator, iar comenzile sunt executate pe server. Tot ce trece prin conexiune, inclusiv parola dumneavoastră, este criptat.
Există două părți:
- clientul SSH de pe propriul calculator: programul
ssh. Pe macOS și Linux este inclus implicit. Pe Windows 10 (începând cu versiunea 1809) și Windows 11, clientul OpenSSH face parte din Windows; îl folosiți în PowerShell sau în Windows Terminal. Dacă lipsește, îl adăugați din Setări, Caracteristici opționale, "Client OpenSSH". Programele cu interfață grafică, precum PuTTY, funcționează și ele, dar în acest curs folosimssh. - serverul SSH de pe VPS: programul
sshd(din OpenSSH). Ascultă implicit pe portul 22.
Autentificarea
Vă conectați cu un nume de utilizator și adresa serverului:
PS C:\Users\anna> ssh root@192.0.2.10Sau cu un nume, dacă l-ați configurat în DNS (lecția 7.1):
anna@laptop:~$ ssh root@web1.example.comPrima dată veți vedea ceva de genul acesta:
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])?Acesta este cel mai important moment al lecției. Nu tastați orbește yes.
Cheia gazdei și amprenta
Fiecare server SSH are una sau mai multe host keys (chei ale gazdei): perechi de chei prin care serverul își dovedește identitatea. Părțile publice se află pe server în /etc/ssh/, de exemplu /etc/ssh/ssh_host_ed25519_key.pub. La fiecare conexiune, serverul arată că deține partea secretă.
O amprentă este un rezumat scurt (un hash) al unei astfel de chei publice. OpenSSH afișează implicit forma SHA256: SHA256: urmat de 43 de caractere.
Întrebarea "Are you sure you want to continue connecting?" înseamnă: calculatorul dumneavoastră nu cunoaște încă acest server. Cine garantează că discutați cu VPS-ul dumneavoastră și nu cu cineva care interceptează traficul? Nimeni, decât dacă dumneavoastră comparați amprenta cu o sursă de încredere.
Această sursă este consola furnizorului dumneavoastră (lecția 1.2). Acolo nu comunicați cu serverul prin rețea. Conectați-vă în consolă și afișați amprenta:
root@web1:~# ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs root@web1 (ED25519)Dacă aceasta corespunde exact cu ce afișează clientul, tastați yes. Puteți lipi și amprenta însăși în loc de yes; atunci ssh o compară în locul dumneavoastră. Dacă diferă, vă opriți și aflați de ce (adresă IP greșită, server reinstalat sau ceva mai grav).
Atenție la tip: clientul menționează tipul (ED25519, ECDSA sau RSA). Comparați amprenta de același tip. Multe imagini afișează amprentele și în consolă la prima pornire (cloud-init), între rânduri precum BEGIN SSH HOST KEY FINGERPRINTS.
known_hosts și trust on first use
Dacă tastați yes, veți vedea:
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.Clientul salvează cheia în ~/.ssh/known_hosts (pe Windows C:\Users\<naam>\.ssh\known_hosts). De acum înainte, o compară automat la fiecare conexiune. Acest model se numește trust on first use (TOFU, încredere la prima utilizare): prima dată trebuie să verificați dumneavoastră, apoi clientul veghează.
De aceea această primă verificare este atât de importantă: dacă acceptați o cheie greșită, clientul nu vă va mai avertiza niciodată.
Dacă lucrați pe un calculator cu Debian sau Ubuntu, numele din known_hosts sunt implicit stocate sub formă de hash (HashKnownHosts yes în /etc/ssh/ssh_config), deci acolo nu veți vedea adrese IP lizibile. Pe Windows și macOS ele apar lizibil. Căutarea funcționează peste tot cu:
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"
Uneori veți vedea acest avertisment:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
...
Host key verification failed.Serverul prezintă o altă cheie decât cea pe care o cunoaște clientul dumneavoastră. În acest caz, ssh refuză conectarea. Există două tipuri de cauze:
| Normal | Suspect |
|---|---|
| Ați reinstalat VPS-ul (chei noi ale gazdei) | Nu ați schimbat nimic și totuși cheia este diferită |
| Adresa IP a fost atribuită altui server | Sunteți conectat la o rețea wifi necunoscută |
| Ați înlocuit intenționat cheile gazdei | Amprenta din consolă diferă de ce vede acum clientul |
Dacă există o explicație normală, verificați din nou amprenta în consolă și abia apoi ștergeți rândul vechi:
anna@laptop:~$ ssh-keygen -R 192.0.2.10
# Host 192.0.2.10 found: line 3
/home/anna/.ssh/known_hosts updated.La următoarea conexiune veți primi din nou întrebarea de la prima dată și veți verifica din nou. Nu setați niciodată StrictHostKeyChecking no în configurația dumneavoastră pentru a scăpa de avertisment: astfel dezactivați exact protecția despre care este vorba.
Bannerul de versiune
Înainte ca ceva să fie criptat, clientul și serverul își trimit reciproc un rând de text: bannerul de versiune. Acesta este vizibil pentru oricine de pe internet. Îl puteți vedea cu 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.5Serverul indică aici ce protocol (2.0) și ce software folosește. Debian și Ubuntu adaugă la final versiunea pachetului. Acesta nu este un secret pe care trebuie să-l ascundeți: atacatorii încearcă oricum totul, iar dumneavoastră vă protejați prin actualizări (modulul 4), nu printr-un alt banner. Totuși este util: din banner vedeți din exterior dacă serverul dumneavoastră rulează într-adevăr versiunea actualizată.
Pe AlmaLinux și Rocky Linux
Autentificarea și amprentele funcționează la fel. Serviciul se numește sshd în loc de ssh (systemctl status sshd). Bannerul nu conține numele distribuției, doar versiunea OpenSSH.
Rezumat
- SSH este conexiunea criptată către serverul dumneavoastră;
ssheste clientul,sshdserverul pe portul 22. - La prima conexiune, clientul afișează amprenta cheii gazdei. Comparați-o cu rezultatul comenzii
ssh-keygen -lfdin consolă înainte de a tastayes. - Clientul salvează cheia în
~/.ssh/known_hostsși de acum înainte vă avertizează singur (trust on first use). - "REMOTE HOST IDENTIFICATION HAS CHANGED" este normal după o reinstalare; altfel este suspect. Ștergeți un rând vechi doar după verificare, cu
ssh-keygen -R. - Bannerul de versiune este public; protecția vine din actualizări, nu din ascundere.
Test (quiz)
Exercițiu
Exercițiul Z1.3: Bannerul SSH și amprenta serverului dvs. Completați adresa serverului dumneavoastră, versiunea software din banner (de exemplu OpenSSH_9.6p1) și amprenta ED25519 pe care ați obținut-o în consolă cu ssh-keygen -lf. Programul face o singură conexiune la portul SSH, citește bannerul și cheia gazdei și le compară. Nu se autentifică.
Lecturi suplimentare
- Autentificarea pe VPS prin SSH (și crearea unei chei SSH)
- Nu mai aveți acces la VPS: ce faceți?
- ssh-keygen(1), opțiunile -l, -F și -R: https://manpages.debian.org/trixie/openssh-client/ssh-keygen.1.en.html
- ssh_config(5), StrictHostKeyChecking, FingerprintHash și HashKnownHosts: https://manpages.debian.org/trixie/openssh-client/ssh_config.5.en.html
- RFC 4253, secțiunea 4.2 (bannerul de versiune): https://www.rfc-editor.org/rfc/rfc4253.html
