Modul 2 · 2.3
Pametna uporaba SSH
Modul 2: SSH in ključi · Čas branja: 10 minut
Učni cilj: Po tej lekciji boste SSH vsak dan lahko udobno uporabljali z lastno konfiguracijsko datoteko, kopirali datoteke s scp in rsync ter prek tunela dostopali do podatkovne baze, ne da bi morali vrata podatkovne baze odpreti proti internetu.
Ključni pojmi: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, posredovanje vrat (port forwarding), -L, tunel, ProxyJump, ServerAliveInterval, druga številka vrat, preklic ključa
Manj tipkanja z ~/.ssh/config
Po nekaj tednih boste tole vtipkali več desetkrat na dan:
anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10S konfiguracijsko datoteko za odjemalca postane to krajše in naredite manj napak. Datoteka je na Vašem lastnem računalniku: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, brez končnice).
Host web1
HostName 192.0.2.10
User anna
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
Host test
HostName test.example.com
User anna
Port 2222Zdaj je preprosto:
anna@laptop:~$ ssh web1
anna@web1:~$Kaj naredijo te vrstice?
- Host je vzdevek, ki ga izberete sami. Vpišete ga za
ssh,scpinrsync. - HostName je pravi naslov: naslov IP ali ime, ki je vpisano v DNS.
- User in Port sta uporabniško ime in vrata, tako da si jih Vam ni treba več zapomniti.
- IdentityFile določa ključ. To je priročno, če imate več ključev; brez te vrstice ssh poskusi Vaše privzete ključe.
- ServerAliveInterval 60 vsakih 60 sekund pošlje majhen znak življenja. Številni domači usmerjevalniki in omrežja wifi tiho povezavo prekinejo po nekaj minutah; s tem Vaša seja ostane odprta.
Tudi tu velja, da šteje prva vrednost, tako kot pri strežniku. Splošna pravila, kot je Host *, zato postavite na dno datoteke.
Kopiranje datotek: scp, rsync in sftp
scp kopira datoteko v enaki obliki kot cp, vendar s predpono host::
anna@laptop:~$ scp backup.sql web1:/home/anna/
anna@laptop:~$ scp web1:/var/log/nginx/error.log .rsync je pametnejši pri mapah in velikih količinah: pošlje samo tisto, kar se je spremenilo, in lahko nadaljuje prekinjeno kopiranje. Nameščen mora biti na obeh straneh (apt install rsync).
anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/Bodite pozorni na poševnico za ./site/: s poševnico rsync kopira vsebino mape, brez poševnice pa mapo samo (takrat dobite /var/www/example.com/site/). Če niste prepričani, najprej poskusite z --dry-run, in bodite zelo previdni z --delete, ki na prejemni strani izbriše vse, česar pri Vas ni.
sftp in grafični programi, kot sta FileZilla ali WinSCP, uporabljajo isto povezavo SSH in isti ključ. Ločen strežnik FTP torej ni potreben. Staromodnega strežnika FTP na VPS ne priporočamo: navaden FTP Vaše geslo pošlje po omrežju nešifrirano.
Tunel namesto odprtih vrat
To je morda najkoristnejše, kar zmore SSH. Recimo, da na Vašem strežniku teče podatkovna baza PostgreSQL. Do nje želite dostopati s prenosnika z grafičnim programom. Skušnjava je velika, da bi vrata 5432 odprli proti internetu. Tega ne storite: odprta vrata podatkovnih baz so eden največjih vzrokov za uhajanje podatkov (lekcija 10.2), tečaj pa bo pozneje od zunaj preveril, ali so zaprta (naloga Z5.1).
Z lokalnim posredovanjem vrat (local port forwarding) SSH ustvari tunel:
anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1To preberite tako: »poslušaj na mojem prenosniku na vratih 5432 in vse, kar tja prispe, pošlji skozi povezavo SSH do 127.0.0.1:5432, gledano s strežnika«. Dokler je ta seja odprta, svoj program za podatkovne baze povežete z localhost, vrata 5432 na Vašem lastnem prenosniku, in pridete do podatkovne baze na strežniku.
Zakaj je to tako dobro?
- Podatkovna baza na strežniku posluša samo na
127.0.0.1in je od zunaj nedosegljiva. - Povezavo šifrira SSH, tudi če podatkovna baza sama nima šifriranja.
- Dostop ima samo, kdor se lahko prijavi prek SSH. Uporabljate torej močno zaščito, ki jo že imate.
Če na Vašem prenosniku na 5432 že nekaj teče, na levi izberite drugo številko: -L 15432:127.0.0.1:5432, in se povežite na vrata 15432. Če tunel vpišete v ~/.ssh/config, ga imate vedno pri roki:
Host web1-db
HostName 192.0.2.10
User anna
LocalForward 15432 127.0.0.1:5432Z ssh -N web1-db dobite samo tunel, brez ukazne vrstice.
Prek vmesnega strežnika: ProxyJump
Včasih je strežnik dosegljiv samo prek drugega, na primer strežnik podatkovne baze brez javnega naslova IP za Vašim spletnim strežnikom. ProxyJump prek prvega strežnika skoči naprej do drugega:
Host db1
HostName 10.0.0.5
User anna
ProxyJump web1Razlika s posredovanjem agenta (agent forwarding, lekcija 2.1): pri ProxyJump šifriranje teče od začetka do konca med Vašim prenosnikom in db1. Vmesni strežnik samo posreduje pakete in Vašega ključa ne more uporabiti.
Druga številka vrat: da ali ne?
Številni priročniki priporočajo, da SSH prestavite na druga vrata, na primer 2222. Kaj to v resnici naredi?
- Zmanjša šum: večina samodejnih poskusov ugibanja preizkuša samo vrata 22. Vaš dnevnik postane mirnejši.
- To ni zaščita. Pregledovalnik, ki preveri vsa vrata, SSH v nekaj sekundah najde po pasici z različico.
S ključi in izklopljeno prijavo z geslom (lekcija 2.2) so vrata za varnost malo pomembna. Če jih vseeno želite zamenjati, to storite v pravem vrstnem redu: odprite nova vrata v požarnem zidu, SSH naj posluša na obeh vratih, preizkusite v drugem oknu in šele nato zaprite stara vrata. Na Ubuntu 24.04 in novejših sodita k temu systemctl daemon-reload in systemctl restart ssh.socket (lekcija 2.2). Ne pozabite, da ima tudi Vaš ponudnik morda požarni zid.
Preklic dostopa
Je imel nekdanji sodelavec ali izdelovalec spletnih strani ključ na Vašem strežniku in za Vas ne dela več? Preklic dostopa je preprost, če imate pregled:
- Preglejte vse ključe:
ssh-keygen -lf ~/.ssh/authorized_keys, in to storite za vsakega uporabnika (tudi za/root/.ssh/authorized_keys). - Odstranite vrstico te osebe.
- Če je uporabljal lasten uporabniški račun, ga zaklenite (lekcija 3.1) in preverite, ali je bil v skupini
sudo(lekcija 3.2). - Če je videl gesla, na primer geslo podatkovne baze v konfiguracijski datoteki, zamenjajte tudi ta.
Navaden ključ nima datuma poteka. Kar ne odstranite, deluje naprej, še leta pozneje. Če nekomu dodelite začasen dostop, lahko pred njegovo vrstico v authorized_keys postavite možnost expiry-time="20261231"; po tem datumu strežnik ključ zavrne.
Povzetek
~/.ssh/configna Vašem lastnem računalniku za vsak strežnik hrani ime, uporabnika, vrata in ključ;Host *sodi na dno.- scp za posamezne datoteke, rsync za mape (pazite na poševnico in na
--delete), sftp namesto FTP. - Z
ssh -Ldosežete podatkovno bazo prek šifriranega tunela, vrata podatkovne baze pa od zunaj ostanejo zaprta. - ProxyJump varno skoči prek vmesnega strežnika; to je boljše od posredovanja agenta.
- Druga številka vrat zmanjša šum, a ne ščiti. Ključi, ki jih ne odstranite, delujejo naprej.
Kviz
Naloga
Naloga O2.3: Konfiguracija SSH in tunel. Na svojem računalniku ustvarite ~/.ssh/config z vzdevkom za svoj strežnik, se prijavite samo z ssh <bijnaam>, kopirajte datoteko s scp ali rsync in z -L ustvarite tunel do storitve, ki na Vašem strežniku posluša samo na 127.0.0.1 (če podatkovne baze še nimate, uporabite vrata 22 samega strežnika: ssh -L 2200:127.0.0.1:22 <bijnaam> in nato ssh -p 2200 anna@localhost). Odgovorite na vprašanja o tem, kaj tunel naredi in zakaj vrat ni treba odpreti.
Naloga O2.3: Konfiguracija SSH in tunel
To nalogo opravite sami; nihče je ne pregleda. Odkljukajte, kar ste naredili, in nalogo označite kot opravljeno.
Vaš prenosnik posluša na levih vratih, promet gre šifrirano skozi SSH in na strežniku pride ven pri 127.0.0.1:<poort>. Storitev ostane od zunaj nedosegljiva. Druga vrata za SSH dajo manj šuma v dnevniku, vendar niso zaščita; ključi in izklopljena prijava z geslom pa so.
Vaše kljukice in zapiski ostanejo samo v tem brskalniku, nikamor jih ne pošiljamo. Če ste prijavljeni, v Moji tečaji shranimo samo podatek, da ste nalogo opravili.
Za nadaljnje branje
Koraki v teh člankih veljajo za VPS-je in nadzorne plošče WebOké; pri drugih ponudnikih deluje podobno.
- Prijava na Vaš VPS prek SSH (in ustvarjanje ključa SSH)
- Priročnik ssh_config (nastavitve odjemalca): https://man.openbsd.org/ssh_config
- Priročnik ssh (možnosti
-L,-J,-N): https://man.openbsd.org/ssh
