Modul 2 · 2.3
Pametno korištenje SSH-a
Modul 2: SSH i ključevi · Vrijeme čitanja: 10 minuta
Cilj učenja: Nakon ove lekcije moći ćete SSH svakodnevno praktično koristiti uz vlastitu konfiguracijsku datoteku, kopirati datoteke pomoću scp i rsync te kroz tunel doći do baze podataka, a da priključak baze podataka ne mora biti otvoren prema internetu.
Ključni pojmovi: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, port forwarding (prosljeđivanje priključaka), -L, tunel, ProxyJump, ServerAliveInterval, drugi broj priključka, opoziv ključa
Manje tipkanja uz ~/.ssh/config
Nakon nekoliko tjedana ovo ćete tipkati desetke puta dnevno:
anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10S konfiguracijskom datotekom za klijent to postaje kraće i rjeđe ćete griješiti. Datoteka se nalazi na Vašem vlastitom računalu: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, bez ekstenzije).
Host web1
HostName 192.0.2.10
User anna
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
Host test
HostName test.example.com
User anna
Port 2222Sada je dovoljno samo:
anna@laptop:~$ ssh web1
anna@web1:~$Što rade ti redovi?
- Host je nadimak koji sami odaberete. Upisujete ga iza
ssh,scpirsync. - HostName je stvarna adresa: IP adresa ili naziv koji postoji u DNS-u.
- User i Port su korisničko ime i priključak, tako da ih više ne morate pamtiti.
- IdentityFile određuje ključ. Korisno je ako imate više ključeva; bez ovog reda ssh isprobava Vaše zadane ključeve.
- ServerAliveInterval 60 svakih 60 sekundi šalje mali znak života. Mnogi kućni usmjerivači i Wi-Fi mreže prekidaju neaktivnu vezu nakon nekoliko minuta; ovako Vaša sesija ostaje otvorena.
I ovdje vrijedi prva vrijednost, kao i na poslužitelju. Opća pravila poput Host * zato stavite na dno datoteke.
Kopiranje datoteka: scp, rsync i sftp
scp kopira datoteku, u istom obliku kao cp, ali s host: ispred:
anna@laptop:~$ scp backup.sql web1:/home/anna/
anna@laptop:~$ scp web1:/var/log/nginx/error.log .rsync je pametniji kod mapa i velikih količina podataka: šalje samo ono što se promijenilo i može nastaviti prekinuto kopiranje. Mora biti instaliran na obje strane (apt install rsync).
anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/Pazite na kosu crtu iza ./site/: s kosom crtom rsync kopira sadržaj mape, bez nje kopira samu mapu (tada dobivate /var/www/example.com/site/). Ako niste sigurni, najprije pokušajte s --dry-run i budite vrlo oprezni s --delete, koji na strani primatelja briše sve što kod Vas ne postoji.
sftp i grafički programi poput FileZille ili WinSCP-a koriste istu SSH vezu i isti ključ. Zaseban FTP poslužitelj stoga nije potreban. Zastarjeli FTP poslužitelj na VPS-u ne preporučujemo: obični FTP šalje Vašu lozinku mrežom nešifrirano.
Tunel umjesto otvorenog priključka
Ovo je možda najkorisnije što SSH može. Zamislite: na Vašem poslužitelju radi PostgreSQL baza podataka. S prijenosnog računala želite joj pristupiti grafičkim programom. Velika je napast otvoriti priključak 5432 prema internetu. Nemojte to činiti: otvoreni priključci baza podataka jedan su od najvećih uzroka curenja podataka (lekcija 10.2), a tečaj će kasnije izvana provjeriti jesu li zatvoreni (zadatak Z5.1).
Uz lokalno prosljeđivanje priključaka (local port forwarding) SSH stvara tunel:
anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1Čitajte to ovako: "slušaj na mom prijenosnom računalu na priključku 5432 i sve što tamo stigne pošalji kroz SSH vezu na 127.0.0.1:5432, gledano s poslužitelja". Dok je ta sesija otvorena, svoj program za bazu podataka povezujete s localhost priključak 5432 na vlastitom prijenosnom računalu i tako stižete do baze podataka na poslužitelju.
Zašto je to tako dobro?
- Baza podataka na poslužitelju sluša samo na
127.0.0.1i izvana je nedostupna. - Vezu šifrira SSH, čak i ako sama baza podataka nema šifriranje.
- Pristup ima samo onaj tko se može prijaviti putem SSH-a. Dakle, koristite snažnu zaštitu koju već imate.
Ako na Vašem prijenosnom računalu nešto već radi na 5432, lijevo odaberite drugi broj: -L 15432:127.0.0.1:5432 i povežite se na priključak 15432. Ako tunel upišete u ~/.ssh/config, uvijek Vam je pri ruci:
Host web1-db
HostName 192.0.2.10
User anna
LocalForward 15432 127.0.0.1:5432S ssh -N web1-db dobivate samo tunel, bez naredbenog retka.
Preko posredničkog poslužitelja: ProxyJump
Ponekad nekom poslužitelju možete pristupiti samo preko drugoga, primjerice poslužitelju baze podataka bez javne IP adrese iza Vašeg web-poslužitelja. ProxyJump preko prvog poslužitelja skače na drugi:
Host db1
HostName 10.0.0.5
User anna
ProxyJump web1Razlika u odnosu na agent forwarding (lekcija 2.1): kod ProxyJumpa šifriranje teče od početka do kraja između Vašeg prijenosnog računala i db1. Posrednički poslužitelj samo prosljeđuje pakete i ne može koristiti Vaš ključ.
Drugi broj priključka: da ili ne?
Mnogi priručnici savjetuju premjestiti SSH na drugi priključak, primjerice 2222. Što to zapravo postiže?
- Smanjuje šum: većina automatiziranih pokušaja pogađanja isprobava samo priključak 22. Vaš zapisnik postaje mirniji.
- Nije zaštita. Skener koji prolazi kroz sve priključke pronaći će SSH u nekoliko sekundi po njegovom bannera s verzijom.
S ključevima i isključenom prijavom lozinkom (lekcija 2.2) priključak malo znači za sigurnost. Ako ga ipak želite promijeniti, učinite to pravilnim redoslijedom: otvorite novi priključak u vatrozidu, neka SSH sluša na oba priključka, testirajte u drugom prozoru, a tek onda zatvorite stari priključak. Na Ubuntu 24.04 i novijima tome pripadaju i systemctl daemon-reload i systemctl restart ssh.socket (lekcija 2.2). Ne zaboravite da Vaš pružatelj usluge možda također ima vatrozid.
Opoziv pristupa
Bivši kolega ili web-dizajner imao je ključ na Vašem poslužitelju i više ne radi za Vas? Opoziv pristupa je jednostavan, ako vodite evidenciju:
- Pregledajte sve ključeve:
ssh-keygen -lf ~/.ssh/authorized_keys, i to učinite za svakog korisnika (i za/root/.ssh/authorized_keys). - Uklonite red te osobe.
- Ako je koristio vlastiti korisnički račun, zaključajte ga (lekcija 3.1) i provjerite je li bio u grupi
sudo(lekcija 3.2). - Ako je vidio lozinke, primjerice lozinku baze podataka u konfiguracijskoj datoteci, promijenite i njih.
Običan ključ nema datum isteka. Ono što ne uklonite nastavlja raditi, i godinama kasnije. Ako nekome dajete privremeni pristup, ispred njegova reda u authorized_keys možete staviti opciju expiry-time="20261231"; nakon tog datuma poslužitelj odbija ključ.
Sažetak
~/.ssh/configna Vašem računalu za svaki poslužitelj čuva naziv, korisnika, priključak i ključ;Host *ide na dno.- scp za pojedinačne datoteke, rsync za mape (pazite na kosu crtu i na
--delete), sftp umjesto FTP-a. - S
ssh -Ldo baze podataka dolazite kroz šifrirani tunel, dok priključak baze podataka izvana ostaje zatvoren. - ProxyJump sigurno skače preko posredničkog poslužitelja; bolje od agent forwardinga.
- Drugi broj priključka smanjuje šum, ali ne štiti. Ključevi koje ne uklonite nastavljaju raditi.
Kviz
Zadatak
Zadatak O2.3: SSH config i tunel. Na svom računalu izradite ~/.ssh/config s nadimkom za svoj poslužitelj, prijavite se samo s ssh <bijnaam>, kopirajte datoteku pomoću scp ili rsync i izradite tunel s -L do usluge koja na Vašem poslužitelju sluša samo na 127.0.0.1 (ako još nemate bazu podataka, upotrijebite priključak 22 samog poslužitelja: ssh -L 2200:127.0.0.1:22 <bijnaam> i zatim ssh -p 2200 anna@localhost). Odgovorite na pitanja o tome što tunel radi i zašto priključak ne mora biti otvoren.
Zadatak O2.3: SSH config i tunel
Ovaj zadatak rješavate sami; nitko ga ne provjerava. Označite što ste napravili i označite zadatak kao završen.
Vaše prijenosno računalo sluša na lijevom portu, promet putuje šifrirano kroz SSH i na poslužitelju izlazi na 127.0.0.1:<poort>. Usluga ostaje nedostupna izvana. Drugi SSH port daje manje šuma u Vašem logu, ali nije zaštita; ključevi i isključena prijava lozinkom to jesu.
Vaše kvačice i bilješke ostaju samo u ovom pregledniku; ne šaljemo ih nikamo. Ako ste prijavljeni, u Moji tečajevi čuvamo samo podatak da ste zadatak završili.
Dodatno štivo
Koraci u ovim člancima vrijede za WebOké VPS-ove i upravljačke ploče; kod drugih pružatelja usluga postupak je sličan.
- Prijava na Vaš VPS putem SSH-a (i izrada SSH ključa)
- Priručnik ssh_config (postavke klijenta): https://man.openbsd.org/ssh_config
- Priručnik ssh (opcije
-L,-J,-N): https://man.openbsd.org/ssh
