Blog o spletnem programiranju in elektroniki
💬 👤
back Nazaj na blog
Linux

Kako deluje SSH: Varna povezava z oddaljenimi strežniki

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

  1. Odjemalec (client): Računalnik, s katerega se povezujete (npr. vaš PC)
  2. Strežnik (server): Oddaljeni računalnik, na katerega se povezujete (npr. VPS)
  3. Ključni par (key pair): Javni in zasebni ključ za avtentikacijo
  4. known_hosts: Datoteka, ki shranjuje prstne odtise strežnikov, s katerimi ste se povezali
  5. 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:

  1. ~/.ssh/id_ed25519 — zasebni ključ (nikoli ga ne delite z nikomer!)
  2. ~/.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:

  1. Onemogočite prijavo z geslom: Uporabljajte samo ključe. V datoteki /etc/ssh/sshd_config nastavite PasswordAuthentication no
  2. Onemogočite prijavo za root: Nastavite PermitRootLogin no. Prijavite se kot navadni uporabnik in uporabite sudo
  3. Spremenite standardna vrata: Namesto porta 22 uporabite npr. 2222. To zmanjša število avtomatiziranih napadov
  4. Uporabite fail2ban: Orodje, ki samodejno blokira IP naslove po več neuspelih poskusih prijave
  5. 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.

back Nazaj na blog