SSH (Secure Shell) je protokol, ki omogoča varno povezavo z oddaljenim računalnikom preko nezavarovane mreže. Vsak sistemski administrator, razvijalec ali vsakdo, ki upravlja s strežnikom, uporablja SSH vsakodnevno. Brez SSH bi bil oddaljen dostop do strežnikov izpostavljen prisluškovanju in napadom.
Kaj je SSH?
SSH je kriptografski mrežni protokol, ki deluje nad TCP/IP protokolom. Razvit je bil leta 1995 kot nadomestilo za starejše, nevarne protokole, kot sta Telnet in rlogin, ki sta prenašala podatke v izvorni obliki - vključno z gesli. SSH uporablja enkripcijo za zaščito vse komunikacije med odjemalcem in strežnikom.
Standardna vrata (port) za SSH so 22.
Ključni pojmi
- Odjemalec (client): Računalnik, s katerega se povezujete (npr. vaš PC)
- Strežnik (server): Oddaljeni računalnik, na katerega se povezujete (npr. VPS)
- Ključni par (key pair): Javni in zasebni ključ za avtentikacijo
- known_hosts: Datoteka, ki shranjuje prstne odtise strežnikov, s katerimi ste se povezali
- authorized_keys: Datoteka na strežniku, ki vsebuje javne ključe uporabnikov, ki se smejo povezati
Postopek povezave
Ko v terminalu vpišete ssh user@server, se zgodijo naslednji koraki:
| Korak | Opis |
|---|---|
| 1. TCP povezava | Odjemalec vzpostavi TCP povezavo s strežnikom na vrata 22 |
| 2. Pregled različic | Obe strani izmenjata podprte različice SSH in enkripcijskih algoritmov |
| 3. Izmenjava ključev | Uporabi se Diffie-Hellman-ov algoritem za varno izmenjavo skupnega tajnega ključa |
| 4. Avtentikacija strežnika | Odjemalec preveri identiteto strežnika (prstni odtis / known_hosts) |
| 5. Avtentikacija uporabnika | Uporabnik se avtenticira z geslom ali zasebnim ključem |
| 6. Šifrirana seja | Vsa nadaljnja komunikacija je šifrirana s simetrično enkripcijo |
Avtentikacija z geslom ali ključi?
SSH podpira dva glavna načina avtentikacije. Uporaba ključev je priporočena, ker je varnejša in bolj praktična:
| Lastnost | Avtentikacija z geslom | Avtentikacija s ključi |
|---|---|---|
| Varnost | Nižja (ranljiva na brute-force napade) | Visoka (skoraj nemogoče ugibati) |
| Praktičnost | Vpis gesla ob vsaki povezavi | Brez gesla, samodejna povezava |
| Avtomatizacija | Neprimerno za skripte | Idealno za skripte in CI/CD |
Generiranje ključnega para
Ustvarjanje SSH ključev je preprosto. Na Linux ali macOS odprete terminal in zaženete:
# Generiranje ED25519 ključa (priporočeno, moderen in hiter) ssh-keygen -t ed25519 -C "vas-email@primer.com" # Generiranje RSA ključa (alternativa, če strežnik ne podpira ED25519) ssh-keygen -t rsa -b 4096 -C "vas-email@primer.com" # Po generiranju kopiranje javnega ključa na strežnik ssh-copy-id user@server-ip
Po zagonu ssh-keygen boste dobili dve datoteki:
- ~/.ssh/id_ed25519 — zasebni ključ (nikoli ga ne delite z nikomer!)
- ~/.ssh/id_ed25519.pub — javni ključ (ta gre na strežnik v ~/.ssh/authorized_keys)
Osnovna povelja
Tukaj je pregled najpogosteje uporabljenih SSH ukazov:
| Ukaz | Opis | Primer |
|---|---|---|
| ssh | Povezava na oddaljeni strežnik | ssh user@192.168.1.10 |
| ssh -p | Povezava na nestandardna vrata | ssh -p 2222 user@192.168.1.10 |
| ssh-keygen | Generira ključni par | ssh-keygen -t ed25519 |
| ssh-copy-id | Kopira javni ključ na strežnik | ssh-copy-id user@192.168.1.10 |
| scp | Varen prenos datotek preko SSH | scp datoteka.txt user@192.168.1.10:/pot/ |
| rsync -e ssh | Sinhronizacija datotek preko SSH | rsync -avz -e ssh ./local/ user@server:/remote/ |
Konfiguracijska datoteka SSH
Če se pogosto povezujete na več strežnikov, je ročno vpisovanje IP naslovov in vrat zamudno. SSH omogoča konfiguracijsko datoteko ~/.ssh/config, kjer lahko definirate vzdevke (aliases):
# ~/.ssh/config
Host moj-streznik
HostName 192.168.1.10
User uporabnik
Port 22
IdentityFile ~/.ssh/id_ed25519
Host production
HostName production.vadnica.org
User deploy
Port 2222
IdentityFile ~/.ssh/deploy_key
S tem nastavitvami se namesto dolgega ukaza preprosto povežete z:
ssh moj-streznik
Port forwarding (preusmeritev vrat)
SSH lahko uporabite tudi za varen dostop do storitev, ki niso neposredno dostopne iz interneta. Na primer: imate bazo podatkov na strežniku, ki posluša samo na localhost in jo želite varno doseči z lastnega računalnika:
# Lokalno preusmerjanje (local forwarding) # Dostop do oddaljene baze na lokalnem portu 5432 ssh -L 5432:localhost:5432 user@server # Sedaj se na localhost:5432 povežete na bazo, # ki dejansko teče na oddaljenem strežniku # Oddaljeno preusmerjanje (remote forwarding) # Omogoča dostop do lokalne storitve iz strežnika ssh -R 8080:localhost:3000 user@server
Varnostna priporočila
Če imate lasten strežnik, so to najpomembnejši varnostni ukrepi za SSH:
- Onemogočite prijavo z geslom: Uporabljajte samo ključe. V datoteki
/etc/ssh/sshd_confignastavitePasswordAuthentication no - Onemogočite prijavo za root: Nastavite
PermitRootLogin no. Prijavite se kot navadni uporabnik in uporabitesudo - Spremenite standardna vrata: Namesto porta 22 uporabite npr. 2222. To zmanjša število avtomatiziranih napadov
- Uporabite fail2ban: Orodje, ki samodejno blokira IP naslove po več neuspelih poskusih prijave
- Posodabljajte OpenSSH: Starejše različice imajo znane varnostne luknje
POMEMBNO: Preden spremeniš /etc/ssh/sshd_config, naredi varnostno kopijo datoteke! Če narediš napako, se ne boš mogel več povezati na strežnik.
Zakaj uporabljati SSH?
SSH je temeljno orodje za vsakogar, ki dela z oddaljenimi sistemi. Ne glede na to, ali upravljate VPS, konfigurirate Docker kontejnerje na strežniku, varno prenašate datoteke ali vzpostavljate varen tunel do zasebnih storitev - SSH je orodje, ki ga potrebujete.
V nasprotju s Telnetom ali FTP-jem, ki prenašajo podatke v izvorni obliki, SSH zagotavlja, da so vsa vaša gesla, ukazi in datoteke šifrirani in zaščiteni pred prisluškovanjem. V današnjem svetu, kjer so napadi na spletne storitve vsakdanji, uporaba SSH ni izbira - je nujnost.