2 modulis · 2.3
Išmanus SSH naudojimas
2 modulis: SSH ir raktai · Skaitymo laikas: 10 min.
Mokymosi tikslas: Po šios pamokos galėsite patogiai kasdien naudoti SSH su savo konfigūracijos failu, kopijuoti failus su scp ir rsync bei per tunelį pasiekti duomenų bazę, neatverdami duomenų bazės prievado internetui.
Pagrindinės sąvokos: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, prievadų peradresavimas (port forwarding), -L, tunelis, ProxyJump, ServerAliveInterval, kitas prievado numeris, rakto atšaukimas
Mažiau rašymo su ~/.ssh/config
Po kelių savaičių šią eilutę rinksite dešimtis kartų per dieną:
anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10Naudojant kliento konfigūracijos failą, komanda tampa trumpesnė, o klaidų būna mažiau. Failas yra Jūsų kompiuteryje: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, be plėtinio).
Host web1
HostName 192.0.2.10
User anna
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
Host test
HostName test.example.com
User anna
Port 2222Dabar užtenka:
anna@laptop:~$ ssh web1
anna@web1:~$Ką reiškia šios eilutės?
- Host yra slapyvardis, kurį pasirenkate patys. Jį rašote po
ssh,scpirrsync. - HostName yra tikrasis adresas: IP adresas arba vardas, įrašytas DNS.
- User ir Port yra naudotojo vardas ir prievadas, todėl jų nebereikia įsiminti.
- IdentityFile nurodo raktą. Tai patogu, jei turite kelis raktus; be šios eilutės ssh bando Jūsų numatytuosius raktus.
- ServerAliveInterval 60 kas 60 sekundžių siunčia nedidelį gyvybės signalą. Daugelis namų maršrutizatorių ir „Wi-Fi“ tinklų po kelių minučių nutraukia neaktyvų ryšį; su šiuo nustatymu Jūsų sesija lieka atvira.
Čia, kaip ir serveryje, galioja pirmoji reikšmė. Todėl bendras taisykles, pavyzdžiui, Host *, rašykite failo apačioje.
Failų kopijavimas: scp, rsync ir sftp
scp kopijuoja failą, naudodama tokią pačią formą kaip cp, tik su host: priekyje:
anna@laptop:~$ scp backup.sql web1:/home/anna/
anna@laptop:~$ scp web1:/var/log/nginx/error.log .rsync išmaniau tvarko aplankus ir didelius duomenų kiekius: siunčia tik tai, kas pasikeitė, ir gali pratęsti nutrūkusį kopijavimą. Ji turi būti įdiegta abiejose pusėse (apt install rsync).
anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/Atkreipkite dėmesį į pasvirąjį brūkšnį po ./site/: su juo rsync kopijuoja aplanko turinį, be jo kopijuoja patį aplanką (tuomet gausite /var/www/example.com/site/). Jei abejojate, pirmiausia išbandykite su --dry-run ir būkite labai atsargūs su --delete, nes ši parinktis gaunančioje pusėje ištrina viską, ko nėra pas Jus.
sftp ir grafinės programos, tokios kaip FileZilla ar WinSCP, naudoja tą patį SSH ryšį ir tą patį raktą. Todėl atskiro FTP serverio nereikia. Senoviško FTP serverio VPS diegti nerekomenduojama: įprastas FTP siunčia Jūsų slaptažodį tinklu nešifruotą.
Tunelis vietoj atviro prievado
Tai bene naudingiausia SSH galimybė. Tarkime, Jūsų serveryje veikia PostgreSQL duomenų bazė. Norite ją pasiekti iš nešiojamojo kompiuterio grafine programa. Pagunda atverti prievadą 5432 internetui yra didelė. Nedarykite to: atviri duomenų bazių prievadai yra viena didžiausių duomenų nutekėjimo priežasčių (pamoka 10.2), o vėliau kursas iš išorės patikrins, ar jie uždaryti (užduotis Z5.1).
Naudodami vietinį prievadų peradresavimą, leidžiate SSH sukurti tunelį:
anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1Skaitykite tai taip: „klausytis mano nešiojamajame kompiuteryje prievade 5432 ir viską, kas ten ateina, per SSH ryšį siųsti į 127.0.0.1:5432, žiūrint iš serverio“. Kol ši sesija atvira, duomenų bazės programą jungiate prie localhost prievado 5432 savo nešiojamajame kompiuteryje ir pasiekiate duomenų bazę serveryje.
Kodėl tai taip gerai?
- Duomenų bazė serveryje klausosi tik
127.0.0.1ir iš išorės yra nepasiekiama. - Ryšį šifruoja SSH, net jei pati duomenų bazė šifravimo neturi.
- Prieigą gauna tik tas, kas gali prisijungti per SSH. Taigi naudojate jau turimą stiprią apsaugą.
Jei Jūsų nešiojamajame kompiuteryje prievadą 5432 jau kas nors naudoja, kairėje pasirinkite kitą numerį: -L 15432:127.0.0.1:5432, ir junkitės prie prievado 15432. Jei tunelį įrašysite į ~/.ssh/config, jis visada bus po ranka:
Host web1-db
HostName 192.0.2.10
User anna
LocalForward 15432 127.0.0.1:5432Su ssh -N web1-db gaunate tik tunelį, be komandinės eilutės.
Per tarpinį serverį: ProxyJump
Kartais serverį galima pasiekti tik per kitą serverį, pavyzdžiui, duomenų bazės serverį be viešo IP adreso už Jūsų žiniatinklio serverio. ProxyJump per pirmąjį serverį peršoka į antrąjį:
Host db1
HostName 10.0.0.5
User anna
ProxyJump web1Skirtumas nuo agento peradresavimo (agent forwarding, pamoka 2.1): naudojant ProxyJump, šifravimas veikia nuo pradžios iki galo tarp Jūsų nešiojamojo kompiuterio ir db1. Tarpinis serveris tik perduoda paketus ir negali naudoti Jūsų rakto.
Kitas prievado numeris: verta ar ne?
Daugelyje vadovų patariama perkelti SSH į kitą prievadą, pavyzdžiui, 2222. Ką tai iš tikrųjų duoda?
- Tai sumažina triukšmą: dauguma automatizuotų spėliojimo bandymų bando tik prievadą 22. Jūsų žurnalas tampa ramesnis.
- Tai nėra apsauga. Skeneris, tikrinantis visus prievadus, per kelias sekundes atpažįsta SSH pagal versijos banerį.
Kai naudojate raktus ir prisijungimas slaptažodžiu išjungtas (pamoka 2.2), prievadas saugumui beveik neturi reikšmės. Jei vis tiek norite jį pakeisti, darykite tai teisinga tvarka: atverkite naująjį prievadą užkardoje, leiskite SSH klausytis abiejuose prievaduose, išbandykite antrame lange ir tik tada uždarykite senąjį prievadą. Ubuntu 24.04 ir naujesnėse versijose prie to priklauso systemctl daemon-reload ir systemctl restart ssh.socket (pamoka 2.2). Nepamirškite, kad Jūsų paslaugų teikėjas taip pat gali turėti užkardą.
Prieigos atšaukimas
Buvęs kolega ar svetainių kūrėjas turėjo raktą Jūsų serveryje, bet nebedirba su Jumis? Atšaukti prieigą paprasta, jei tai sekate:
- Peržiūrėkite visus raktus:
ssh-keygen -lf ~/.ssh/authorized_keys, ir padarykite tai kiekvienam naudotojui (taip pat/root/.ssh/authorized_keys). - Pašalinkite to asmens eilutę.
- Jei jis naudojo atskirą naudotojo paskyrą, užrakinkite ją (pamoka 3.1) ir patikrinkite, ar jis buvo grupėje
sudo(pamoka 3.2). - Jei jis matė slaptažodžius, pavyzdžiui, duomenų bazės slaptažodį konfigūracijos faile, pakeiskite ir juos.
Įprastas raktas neturi galiojimo pabaigos datos. Tai, ko nepašalinsite, veiks ir po daugelio metų. Jei kam nors suteikiate laikiną prieigą, prieš jo eilutę faile authorized_keys galite įrašyti parinktį expiry-time="20261231"; po šios datos serveris raktą atmes.
Santrauka
~/.ssh/configJūsų kompiuteryje kiekvienam serveriui saugo vardą, naudotoją, prievadą ir raktą;Host *rašoma apačioje.- scp skirta atskiriems failams, rsync aplankams (atkreipkite dėmesį į pasvirąjį brūkšnį ir
--delete), sftp vietoj FTP. - Su
ssh -Lpasiekiate duomenų bazę per šifruotą tunelį, o duomenų bazės prievadas iš išorės lieka uždarytas. - ProxyJump saugiai peršoka per tarpinį serverį; tai geriau nei agento peradresavimas.
- Kitas prievado numeris sumažina triukšmą, bet neapsaugo. Nepašalinti raktai ir toliau veikia.
Testas (quiz)
Užduotis
Užduotis O2.3: SSH konfigūracija ir tunelis. Savo kompiuteryje sukurkite ~/.ssh/config su savo serverio slapyvardžiu, prisijunkite naudodami tik ssh <bijnaam>, nukopijuokite failą su scp arba rsync ir sukurkite tunelį su -L į paslaugą, kuri Jūsų serveryje klausosi tik 127.0.0.1 (jei duomenų bazės dar neturite, naudokite paties serverio prievadą 22: ssh -L 2200:127.0.0.1:22 <bijnaam>, o po to ssh -p 2200 anna@localhost). Atsakykite į klausimus apie tai, ką daro tunelis ir kodėl prievado atverti nereikia.
Užduotis O2.3: SSH konfigūracija ir tunelis
Šią užduotį atliekate patys; niekas jos netikrina. Pažymėkite, ką atlikote, ir pažymėkite užduotį kaip atliktą.
Jūsų nešiojamasis kompiuteris klausosi kairiojo prievado, srautas šifruotas eina per SSH ir serveryje pasiekia 127.0.0.1:<poort>. Paslauga lieka nepasiekiama iš išorės. Kitas SSH prievadas sumažina triukšmą žurnale, bet nėra apsauga; apsauga yra raktai ir išjungtas prisijungimas slaptažodžiu.
Jūsų pažymėti varneliai ir pastabos lieka tik šioje naršyklėje; niekur jų nesiunčiame. Jei esate prisijungę, skiltyje Mano kursai išsaugome tik tai, kad užduotį atlikote.
Skaitykite daugiau
Šiuose straipsniuose aprašyti veiksmai taikomi WebOké VPS ir valdymo skydeliams; pas kitus paslaugų teikėjus viskas veikia panašiai.
- Prisijungimas prie Jūsų VPS per SSH (ir SSH rakto sukūrimas)
- ssh_config vadovas (kliento nustatymai): https://man.openbsd.org/ssh_config
- ssh vadovas (parinktys
-L,-J,-N): https://man.openbsd.org/ssh
