Što je SSH?
SSH ili Secure Shell je protokol za udaljenu administraciju. Omogućuje spajanje i upravljanje serverima preko Interneta s bilo koje lokacije na svijetu. Servis je stvoren kao sigurna zamjena za nekriptirani Telnet i koristi kriptografske tehnike kako bi osigurao da sva komunikacija do i od udaljenog servera bude kriptirana. SSH provjerava autentičnost korisnika koji se pokušava spojiti na server putem SSH protokola, najčešće korisničkim imenom i lozinkom. SSH mehanizam omogućava prijenos komandi s klijenta do poslužitelja (input -> klijent do servera) i prosljeđivanje odgovora natrag do klijenta (output -> server do klijenta).
Na slici ispod prikazan je tipičan SSH prozor. Svaki Linux ili MacOS korisnik može koristiti SSH izravno iz terminala vlastitog OS-a. Windows korisnici moraju instalirati SSH klijenta, najčešće Putty ili neki sličan program. Pomoću SSH, možete izvršiti shell naredbe na isti način kao što biste ih izvršavali da imate fizički pristup serveru (kao da ste u kompaniji u kojoj se nalazi server).

Ovaj SSH tutorial će pokriti osnove o tome kako ssh radi, zajedno sa tehnologijama koje protokol koristi kako bi ponudio siguran način za udaljeni (daljinski) pristup. Tutorijal će pokriti različite slojeve i njihovu svrhu te tipove enkripcije koje se koriste unutar SSH protokola.
Kako radi SSH
Ako koristite Linux ili Mac, tada je korištenje SSH protokola vrlo jednostavno. Ako koristite Windows, morat ćete instalirati SSH klijent za otvaranje SSH konekcije. Najpopularniji SSH klijent je Putty. O njemu možete više naučiti ovdje.
Za Mac i Linux korisnike, otvorite terminal i zatim slijedite postupak u nastavku. Ukoliko ne znate kako otvoriti terminal, a koristite Mac, pogledajte ovdje. Ukoliko ne znate kako otvoriti terminal, a koristite Linux, pogledajte ovdje.
SSH naredba sastoji se od 3 različita dijela:
| ssh {korisničko_ime}@{hostname_ili_IP_adresa_servera} |
SSH naredba govori sustavu da želite otvoriti kriptiranu Secure Shell konekciju. {korisničko_ime} predstavlja account s kojim se želite spojiti na server pomoću SSH protokola. Na primjer, želite se logirati kao root, što je sinonim za administratora sustava s apsolutno svim pravima na sustavu. {hostname_ili_IP_adresa_servera} odnosi se na računalo na koje se želite logirati. To može biti IP adresa (npr. 244.235.23.19) ili ime domene (npr. http://www.xyzdomain.com).
Kada pritisnete Enter, sustav će vas tražiti da unesete lozinku za account s kojim se pokušavate logirati. Kada unosite password, ne pojavljuju se slova na ekranu, ali se vaša lozinka upisuje u pozadini, skriveno. To je jedan od zaštitnih mehanizama Linuxa. Kada unesete lozinku, stisnite Enter. Ako ste ispravno unijeli lozinku, ostvarili ste pristup secure shellu udaljenog servera. Ako je lozinka koju ste unijeli neispravna, udaljeni server će vas obavijestiti da je odbio pristup i tražit će da ponovno unesete lozinku.
Ako želite više naučiti o SSH naredbama, više možete pronaći ovdje.
Razumijevanje različitih tehnika enkripcije
Host je zapravo udaljeno računalo kojem pokušavate pristupiti (server), a klijent je računalo koje koristite, kojim pokušavate pristupiti hostu. Značajna prednost koju SSH nudi za razliku od svojih prethodnika je korištenje enkripcije kako bi se osigurao siguran prijenos podataka između servera i klijenta.Razlikujemo tri različite tehnologije enkripcije koje koristi SSH protokol:
- Simetrična enkripcija
- Asimetrična enkripcija
- Hashing.
Simetrična enkripcija
Simetrična enkripcija je oblik enkripcije gdje serveri klijent koriste dva identična tajna ključa (server ima svoj, a klijent ima svoj) za kriptiranje i dekriptiranje poruka. Efektivno, tko god posjeduje ključ može dekriptirati poruku koja se prenosi.

Simetrična enkripcija se često naziva enkripcija dijeljenog ključa ili enkripcija dijeljene tajne. U takvoj enkripciji je obično samo jedan (može ih biti i više, ali svi su isti) ključ koji se koristi. Ponekad se koriste parovi ključeva, pri čemu se jedan ključ može lako izračunati pomoću drugog ključa.
Simetrični ključevi se koriste za kriptiranje cijele komunikacije tijekom SSH sesije. Klijent i server stvaraju tajni ključ na dogovoreni način, a stvoreni ključ kao rezultat dogovora nikada se ne otkriva bilo kojoj trećoj strani.
Proces stvaranja simetričnog ključa provodi se pomoću algoritma razmjene ključa (key exchange algorithm). Ono što ovaj algoritam čini naročito sigurnim je činjenica da se ključ nikada ne prenosi između klijenta i servera. Umjesto toga, dva računala dijele javne dijelove podataka i onda manipuliraju njima na dogovoren način kako bi svaka strana samostalno izračunala tajni ključ. Čak i ako napadač ukrade javno dijeljene podatke, on neće biti u mogućnosti izračunati ključ zato što ne zna dogovoreni algoritam razmjene ključa.
Također, važno je znati da je tajni token specifičan za svaku SSH sesiju. Tajni ključ se generira prije nego što klijent pristupi autentifikaciji. Jednom kada je ključ generiran, svi paketi između klijenta i servera moraju biti kriptirani privatnim ključem. To uključuje i lozinku koju korisnik upisuje u konzolu. Na taj način su credentiali uvijek zaštićeni od sniffera mrežnih paketa.
Postoje različiti cipheri simetrične enkripcije, a najpoznatiji su AES (Advanced Encryption Standard), CAST128, Blowfish itd. Prije uspostavljanja sigurne veze, klijent i server odlučuju koji će cipher koristiti tako što objave listu podržanih ciphera poredanih počevši sa cipherom kojeg najviše preferiraju prema cipheru kojeg najmanje preferiraju. Cipher kojeg klijent najviše preferira, a nalazi se na listi ciphera koje server podržava se koristi kao dvosmjerni cipher.
Na primjer, ako dvija Ubuntu 14.04 LTS računala komuniciraju međusobno preko SSH, oni će koristiti aes128-ctr kao defaultni cipher.
Asimetrična enkripcija
Za razliku od simetrične enkripcije, asimetrična enkripcija koristi dva odvojena ključa, jedan za kriptiranje, a drugi za dekriptiranje podataka. Ova dvija ključa se nazivaju privatni i javni ključ. Zajedno, ova dva ključa čine javno-privatni par ključeva.

Javni ključ se otvoreno distribuira i dijeli sa svim stranama uključenim u komunikaciju. U smislu funkcionalnosti, usko je povezan sa privatnim ključem, ali privatni ključ ne može se matematički izračunati iz javnog ključa. Odnos između dva ključa je vrlo kompleksan: poruka koja je kriptirana javnim ključem računala, može se dekriptirati samo privatnim ključem istog računala. Ova jednosmjerna relacija znači da javni ključ ne može dekriptirati svoje vlastite poruke, niti može dekriptirati ništa kriptirano bilo kakvim privatnim ključem.
Privatni ključ mora ostati privatan tj. da bi konekcija bila sigurna, nikakva treća strana ne smije znati privatni ključ. Snaga cijele konekcije leži u činjenici da se privatni ključ nikada ne otkriva.
Privatni ključ je jedina komponenta sposobna dekriptirati poruke koje su kriptirane pomoću svoj vlastitog javnog ključa.
Asimetrična enkripcija se ne koristi za kriptiranje cijele SSH sesije. Umjesto toga, asimetrična enkripcija se koristi samo za vrijeme algoritma razmjene ključeva tijekom simetrične enkripcije. Prije pokretanja sigurne konekcije, obje strane stvaraju privremene parove javno-privatnih ključeva, i dijele svoje odgovarajuće privremene privatne ključeve sa drugom stranom kako bi dogovorenim metodama obje strane proizvele zajednički tajni ključ.
Nakon što je uspostavljena sigurna simetrična komunikacija, server koristi javni ključ klijenta za generiranje te ga šalje klijentu na provjeru autentičnosti. Ako klijent može uspješno dekriptirati poruku, to znači da posjeduje ispravan privatni ključ. Tada započinje SSH sesija.
Hashing
Jednosmjeran hashing je još jedan oblik kriptografije korišten u Secure Shell konekcijama. Jednosmjerne hash funkcije razlikuju se od gore navedena dva oblika kriptiranja na sljedeći način: Poruke koje se kriptiraju hashiranjem nikada se ne mogu dekriptirati. Hash funkcija stvara jedinstvene vrijednosti fiksne duljine za svaki input (ulaz). Rezultat hash funkcije ne pokazuje nikakav jasan trend koji se može iskoristiti kao ranjivost. Praktični je nemoguće rezultat hash funkcije ponovno vratiti iz hashiranog oblika u ulazni oblik.

Lako je generirati kriptografski hash oblik iz određenog inputa, ali je praktički nemoguće generirati input iz hash oblika. To znači da ako klijent posjeduje ispravan input, on može generirati kriptografički hash i usporediti dobivenu vrijednost te na taj način provjeriti da li sadrži ispravan input.
SSH koristi hash za provjeru autentičnosti u porukama. To se vrši upotrebom HMACs, odnosno Hash based Message Authentication Codes. To osigurava da primljena naredba nije maliciozna ni na koji način.
Dok se bira algoritam simetričnog kriptiranja, bira se također i prikladan algoritam za provjeru autentičnosti poruke. To radi na sličan način na koji se biraju cipheri, što je objašnjeno u odjeljku ”Simetrična enkripcija”.
Svaka poruka koja se šalje mora sadržavati MAC (koja se izračunava pomoću simetričnog ključa), sekvencijalni broj paketa i sadržaj poruke. Ona je poslana izvan simetrično kriptiranih podataka kao zaključni odjeljak komunikacijskog paketa.
Kako SSH radi s tim enkripcijskim tehnikama
Način na koji SSH radi je korištenje klijent-server modela da bi omogućio autentifikaciju dva udaljena sustava i enkripciju podataka koji se razmjenjuju između njih.
SSH po defaultu radi na TCP portu 22 (iako to može biti promijenjeno, ako je potrebno). Host (server) sluša na portu 22 (ili bilo koji drugi port koji je dodijeljen za SSH) za dolazne konekcije. SSH organizira sigurnu konekciju tako što provjerava autentičnost klijenta i otvara ispravanu shell okolinu ako je verifikacija klijenta uspješna.

Klijent mora započeti SSH konekciju inicirajući TCP handshake (rukovanje) sa serverom, osiguravajući sigurnu simetričnu konekciju, provjeru da li identitet prikazan od strane servera odgovara prethodnim zapisima (obično zabilježenih u RSA key store datoteci) i predstavljanjem korisničkih credentiala za provjeru autentičnosti.
Tu su dvije faze za uspostavljanje konekcije: prvo se oba sustava moraju složiti o standardima kriptiranja kako bi zaštitili buduću komunikaciju i drugo, korisnik se mora autenticirati. Ako su credentiali ispravni, korisniku je odobren pristup.
Pregovori o šifriranju sesije
Kada se klijent pokušava povezati sa serverom putem TCPa, server prikazuje protokole kriptiranja i odgovarajuće verzije koje podržava. Ako klijent ima par protokola i verzije koja odgovara serveru, dogovor je postignut, a konekcija započinje s prihvaćenim protokolom. Server koristi asimetričan javni ključ koji klijent može koristiti da bi provjerio autentičnosti servera.
Nakon toga, dvije strane koristite ono što je poznato kao Diffie-Hellman algoritam razmjene ključeva kako bi stvorili simetrični ključ. Ovaj algoritam omogućuje klijentu i serveru da dođu dp zajedničkog ključa za kriptiranje koji će biti korišten dalje za šifriranje cijele komunikacijske sesije.
Evo kako algoritam radi na vrlo osnovnoj razini :
- I klijent i server se slažu oko vrlo velikog primarnog broja, koji, naravno, nema zajednički faktor. Ova vrijednost primarnog broja poznata je i kao vrijednost seeda (sjemena).
- Zatim se dvije strane dogovaraju o zajedničkom mehanizmu kriptiranja za generiranje drugog skupa vrijednosti manipuliranjem seed vrijednostima na specifičan algoritamski način. Ovi mehanizmi, također poznati i kao generatori enkripcije, izvode velike operacije na seedu. Primjer takvog generatora je AES (Advanced Encryption Standard).
- Obje strane neovisno generiraju još jedan glavni broj. To se koristi kao tajni privatni ključ za interakciju.
- Ovaj novo generirani privatni ključ, sa zajedničkim brojem i algoritmom kriptiranja (npr. AES), koristi se za računanje javnog ključa koji se distribuira na drugo računalo.
- Tada obje strane koriste svoj osobni privatni ključ, javni ključ drugog računala i originalni glavni broj da bi stvorili konačni zajednički ključ. Ovaj ključ samostalno izračunavaju oba računala, ali će stvoriti isti ključ za kriptiranje na obje strane.
- Sada kada obje strane imaju zajednički ključ, mogu simetrično kriptirati cijelu SSH sesiju. Isti se ključ može koristiti za kriptiranje i dekriptiranje poruka (čitaj: odjeljak o simetričnom kriptiranju).
Sada kada je uspostavljena sigurna simetrično kriptirana sesija, korisnika se mora autentificirati.
Autentifikacija korisnika
Posljednja faza prije nego što korisnik ostvari pristup serveru je provjera autentičnost njegovih credentiala. Za to, većina SSH korisnika koristi lozinku. Od korisnika se traži da unese korisničko ime, nakon čega slijedi zahtjev za unos lozinke. Ovi credentiali sigurno prolaze kroz simetrično enkriptirani tunel, tako da nema šanse da ih uhvati treća strana.
Iako su lozinke šifrirane, ne preporučuje se korištenje lozinki za sigurne konekcije. To je zato što mnogi roboti mogu jednostavno pogoditi jednostavne ili defaultne lozinke i dobiti pristup vašem računu. Umjesto toga, preporučena alternativa su SSH parovi ključeva. To je skup asimetričnih ključeva koji se koriste za autentifikaciju korisnika bez potrebe za unošenjem lozinke. Kako postaviti SSH parove ključeva, pročitajte ovdje.
Zaključak
Dobivanje detaljnog razumijevanja osnovnog načina na koji funkcionira SSH može pomoći korisnicima da razumiju sigurnosne aspekte ove tehnologije. Većina ljudi ovaj postupak smatra izuzetno kompleksnimi nerazumljivim, ali je mnogo jednostavniji nego što se misli. Ako se pitate koliko vremena treba računalu da izračuna hash i provjeri autentifikaciju korisnika, pa, to se događa za manje od jedne sekunde. Zapravo, većina vremena se troši na prijenos podataka putem Interneta.
Nadamo se da će vam ovaj SSH tutorial pomoći da vidite način na koji se različite tehnologije mogu spojiti zajedno kako bi se stvorio čvrst sustav u kojem svaki mehanizam ima vrlo važnu ulogu. Također, sada znate zašto je Telnet postao stvar prošlosti čim se SSH pojavio.
Za više Linux vodiča, provjerite naš odjeljak „Mrežna infrastruktura“.
Tekst je nastao na temelju članka sa portala Hostinger te je djelomično preveden. Iz originalnog članka izdvojeni su najbitniji dijelovi kako bi budućim čitateljima skratili vrijeme čitanja i učenja. Moguće je da su neki dijelovi teksta parafrazirani te da su neke teme detaljnije ili drugačije objašnjene unutar teksta. Referenca na originalni članak: https://www.hostinger.com/tutorials/ssh-tutorial-how-does-ssh-work. Također, ovaj članak je moguće koristiti u vlastite komercijalne i nekomercijalne svrhe. Ukoliko je članak javno dostupan, obavezno je navođenje izvora uz objavu loga na početku i kraju članka.