1 modulis · 1.3
Pirmasis prisijungimas per SSH
1 modulis: Jūsų pirmasis serveris · Skaitymo laikas: 10 min.
Mokymosi tikslas: Po šios pamokos galėsite pirmą kartą prisijungti prie savo serverio per SSH, patikrinti serverio kontrolinį kodą prieš juo pasitikėdami ir žinosite, ką daryti, kai pasirodo įspėjimas, kad serverio tapatybė pasikeitė.
Pagrindinės sąvokos: SSH, klientas ir serveris, 22 prievadas, versijos baneris, host key, kontrolinis kodas (SHA256), known_hosts, trust on first use, "REMOTE HOST IDENTIFICATION HAS CHANGED", PowerShell ir Terminal
Kas yra SSH
SSH (Secure Shell) yra šifruotas ryšys, kuriuo serverį valdote nuotoliniu būdu. Rašote savo kompiuteryje, o komandos vykdomos serveryje. Viskas, kas perduodama ryšiu, taip pat ir Jūsų slaptažodis, yra užšifruota.
Yra dvi pusės:
- SSH klientas Jūsų kompiuteryje: programa
ssh. macOS ir Linux sistemose ji įdiegta iš karto. Windows 10 (nuo 1809 versijos) ir Windows 11 sistemose OpenSSH klientas yra Windows dalis; jį naudojate per PowerShell arba Windows Terminal. Jei jo nėra, jį galite pridėti per Parametrai, Pasirinktinės funkcijos, "OpenSSH klientas". Programos su langais, pavyzdžiui, PuTTY, taip pat veikia, tačiau šiame kurse naudojamessh. - SSH serveris VPS serveryje: programa
sshd(iš OpenSSH). Pagal numatytuosius nustatymus ji klausosi 22 prievado.
Prisijungimas
Prisijungiate naudotojo vardu ir serverio adresu:
PS C:\Users\anna> ssh root@192.0.2.10Arba vardu, jei jį įrašėte į DNS (pamoka 7.1):
anna@laptop:~$ ssh root@web1.example.comPirmą kartą pamatysite maždaug tai:
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])?Tai svarbiausia šios pamokos akimirka. Nerašykite yes aklai.
Host key ir kontrolinis kodas
Kiekvienas SSH serveris turi vieną ar daugiau host keys: raktų porų, kuriomis serveris įrodo, kas jis yra. Viešosios jų dalys serveryje saugomos /etc/ssh/, pavyzdžiui, /etc/ssh/ssh_host_ed25519_key.pub. Kiekvieno ryšio metu serveris parodo, kad turi slaptąją dalį.
Kontrolinis kodas (fingerprint) yra trumpa tokio viešojo rakto santrauka (maiša, hash). OpenSSH pagal numatytuosius nustatymus rodo SHA256 formą: SHA256: ir po jo 43 simbolius.
Klausimas "Are you sure you want to continue connecting?" reiškia: Jūsų kompiuteris šio serverio dar nepažįsta. Kas garantuoja, kad bendraujate su savo VPS, o ne su kuo nors, kas perima srautą? Niekas, nebent pats palyginate kontrolinį kodą su patikimu šaltiniu.
Tas šaltinis yra Jūsų paslaugų teikėjo konsolė (pamoka 1.2). Joje su serveriu bendraujate ne per tinklą. Prisijunkite prie konsolės ir gaukite kontrolinį kodą:
root@web1:~# ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs root@web1 (ED25519)Jei jis tiksliai sutampa su tuo, ką rodo klientas, rašykite yes. Vietoj yes taip pat galite įklijuoti patį kontrolinį kodą; tada ssh jį palygins už Jus. Jei jis skiriasi, sustokite ir išsiaiškinkite kodėl (neteisingas IP adresas, iš naujo įdiegtas serveris arba kas nors rimčiau).
Atkreipkite dėmesį į tipą: klientas nurodo tipą (ED25519, ECDSA arba RSA). Lyginkite to paties tipo kontrolinį kodą. Daugelis atvaizdų (images) pirmojo paleidimo metu kontrolinius kodus taip pat parodo konsolėje (cloud-init), tarp eilučių, tokių kaip BEGIN SSH HOST KEY FINGERPRINTS.
known_hosts ir trust on first use
Kai parašote yes, pamatysite:
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.Klientas išsaugo raktą faile ~/.ssh/known_hosts (Windows sistemoje C:\Users\<naam>\.ssh\known_hosts). Nuo šiol jis kiekvieno ryšio metu lygina automatiškai. Šis modelis vadinamas trust on first use (TOFU, pasitikėjimas pirmą kartą): pirmą kartą turite patikrinti patys, vėliau tai stebi klientas.
Todėl tas pirmasis patikrinimas toks svarbus: jei patikėsite neteisingu raktu, klientas vėliau niekada nebeįspės.
Jei pats dirbate kompiuteriu su Debian arba Ubuntu, vardai faile known_hosts pagal numatytuosius nustatymus yra užmaišyti (HashKnownHosts yes faile /etc/ssh/ssh_config), todėl ten neįskaitomų IP adresų nepamatysite. Windows ir macOS sistemose jie įrašyti įskaitomai. Ieškoti visur galima taip:
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"
Kartais pamatysite tokį įspėjimą:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
...
Host key verification failed.Serveris rodo kitą raktą, nei pažįsta Jūsų klientas. Tada ssh atsisako jungtis. Priežastys būna dviejų rūšių:
| Įprasta | Įtartina |
|---|---|
| VPS įdiegėte iš naujo (nauji host keys) | Nieko nekeitėte, tačiau raktas vis tiek kitas |
| IP adresas suteiktas kitam serveriui | Esate prisijungę prie svetimo Wi-Fi tinklo |
| Host keys pakeitėte sąmoningai | Kontrolinis kodas konsolėje skiriasi nuo to, ką dabar mato klientas |
Jei yra įprastas paaiškinimas, dar kartą patikrinkite kontrolinį kodą konsolėje ir tik tada pašalinkite seną eilutę:
anna@laptop:~$ ssh-keygen -R 192.0.2.10
# Host 192.0.2.10 found: line 3
/home/anna/.ssh/known_hosts updated.Kito ryšio metu vėl gausite pirmojo karto klausimą ir vėl patikrinsite. Niekada nenustatykite StrictHostKeyChecking no, kad atsikratytumėte įspėjimo: taip išjungtumėte būtent tą apsaugą, apie kurią ir kalbama.
Versijos baneris
Prieš pradedant ką nors šifruoti, klientas ir serveris nusiunčia vienas kitam teksto eilutę: versijos banerį. Jis matomas visiems internete. Jį pamatysite su 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.5Čia serveris nurodo, kokį protokolą (2.0) ir kokią programinę įrangą naudoja. Debian ir Ubuntu prie jo prideda paketo versiją. Tai ne paslaptis, kurią reikėtų slėpti: užpuolikai vis tiek bando viską, o apsisaugote atnaujinimais (modulis 4), ne kitokiu baneriu. Tačiau tai naudinga: iš banerio iš išorės matote, ar Jūsų serveris tikrai veikia su atnaujinta versija.
AlmaLinux ir Rocky Linux sistemose
Prisijungimas ir kontroliniai kodai veikia taip pat. Paslauga vadinasi sshd, o ne ssh (systemctl status sshd). Baneryje nėra distribucijos pavadinimo, tik OpenSSH versija.
Santrauka
- SSH yra šifruotas ryšys su Jūsų serveriu;
sshyra klientas,sshdyra serveris 22 prievade. - Pirmojo ryšio metu klientas parodo host key kontrolinį kodą. Prieš rašydami
yes, palyginkite jį su komandosssh-keygen -lfišvestimi konsolėje. - Klientas išsaugo raktą faile
~/.ssh/known_hostsir toliau įspėja pats (trust on first use). - "REMOTE HOST IDENTIFICATION HAS CHANGED" po pakartotinio įdiegimo yra įprasta; kitu atveju tai įtartina. Seną eilutę šalinkite tik po patikrinimo, su
ssh-keygen -R. - Versijos baneris yra viešas; apsauga ateina iš atnaujinimų, ne iš slėpimo.
Testas (quiz)
Užduotis
Užduotis Z1.3: Jūsų serverio SSH banner ir kontrolinis kodas (fingerprint). Įveskite savo serverio adresą, programinės įrangos versiją iš banerio (pavyzdžiui, OpenSSH_9.6p1) ir ED25519 kontrolinį kodą, kurį gavote konsolėje su ssh-keygen -lf. Programa vieną kartą prisijungia prie Jūsų SSH prievado, nuskaito banerį ir host key, tada palygina. Ji neprisijungia prie paskyros.
Skaitykite daugiau
- Prisijungimas prie Jūsų VPS per SSH (ir SSH rakto sukūrimas)
- Nebeturite prieigos prie savo VPS: ką daryti?
- ssh-keygen(1), parinktys -l, -F ir -R: https://manpages.debian.org/trixie/openssh-client/ssh-keygen.1.en.html
- ssh_config(5), StrictHostKeyChecking, FingerprintHash ir HashKnownHosts: https://manpages.debian.org/trixie/openssh-client/ssh_config.5.en.html
- RFC 4253, 4.2 skirsnis (versijos baneris): https://www.rfc-editor.org/rfc/rfc4253.html
- VPS: nuo pirmojo prisijungimo iki saugaus serverio 2.1: Pirmasis prisijungimas per SSH
