Ovaj će članak zauzeti pristup visoke razine i odozgo prema dolje kako bi objasnio kako SSH radi i kako se koristi za sigurnu komunikaciju s udaljenim računalima.
Pogledat ćemo kako je SSH sesija zapravo 'sigurna' i kako računala uopće uspostavljaju i postavljaju SSH sesiju. Također ćemo se osvrnuti na prednosti upotrebe SSH-a.
Napomena: Ovo je zamišljeno kao buduće bilješke za mene same, ali nadam se da ćete i vi iz toga nešto naučiti!

Što je SSH?
SSH je kratica za "sigurna ljuska". To je protokol za razmjenu podataka između dva računala putem Interneta.
Protokol je u osnovi skup pravila koja definiraju jezik koji računala mogu koristiti za komunikaciju.
Uključena su dva računala obično vaše računalo ('klijent') i udaljeni poslužitelj ('domaćin').
Zašto nas briga?
Sigurna komunikacija između računala
Kad god dva računala komuniciraju putem Interneta, želimo biti sigurni da naše poruke ne može presresti i razumjeti nitko tko ih sluša.
Zamislite da svoje bankovne podatke šaljete putem interneta kako biste nešto kupili putem interneta. Ako vaše poruke nisu šifrirane, tada će svako računalo koje je slušalo ili bilo koje računalo koje je primilo poruke za prosljeđivanje dalje moći vidjeti broj vašeg računa i vašu lozinku. To nije dobro!
Vjerujem da je ovo važan koncept koji treba razumjeti svatko tko želi raditi s web tehnologijama.
Siguran pristup udaljenim računalima
Korištenje SSH-a za provjeru autentičnosti sigurniji je način autentifikacije od upotrebe lozinke. U nastavku ćemo istražiti kako ovo funkcionira.
Kako je SSH siguran?
SSH je siguran način slanja komunikacije između dva računala.
Pod "sigurnim" mislim na način kodiranja poruka na klijentskom računalu, tako da jedino računalo koje može dekodirati poruke i razumjeti ih je domaćin. Ovo se kodiranje / dekodiranje naziva šifriranje, pa ono što ovdje zapravo mislimo je SSH je siguran jer koristi šifrirani komunikacijski kanal.
Kako se uspostavlja SSH sesija?
Postoji nekoliko procesa koji se trebaju dogoditi između dva računala da bi SSH sesija započela.
- Prvo nam je potreban način postavljanja sigurne metode razmjene poruka između računala. Moramo postaviti šifrirani kanal.
- Trebamo način da provjerimo jesu li podaci koje je domaćin primio neovlašteni. To se zove provjera i ovdje provjeravamo integritet podataka koje šalje klijent.
- Provjera (ponovno). Treba nam način da provjerimo da računalo s kojim komuniciramo nije varalica. Ovo je još jedan oblik provjere, ali ovdje provjeravamo identitet računala.
Nakon ova tri koraka sada možemo sigurno komunicirati s udaljenim računalom.
Nakon ovih koraka možemo sigurno dijeliti 'tajne' podatke, a također možemo provjeriti ima li klijent dopuštenje za pristup hostu na sigurniji način od upotrebe lozinke. Taj se postupak naziva provjera autentičnosti pomoću asimetrične enkripcije.
Svaki od ovih odjeljaka u nastavku detaljnije će opisati ove korake.
Postavljanje šifriranog kanala
Temeljni dio SSH protokola je taj što je siguran (čak je i u imenu!), Što znači da su sve informacije koje se šalju pomoću SSH šifrirane.
Kako se ti podaci šifriraju?
Šifriranje u biti znači samo 'premetanje slova' pomoću neke pametne matematike. Oba računala moraju imatinačin šifriranja podataka tako da samo drugo računalo može dešifrirati informacije i razumjeti ih.
Kako ovo radi?
Oba računala imaju identičnu verziju simetričnog ključa. Simetrični ključ samo je niz slova pohranjenih negdje na računalima. Računala mogu koristiti simetrične ključeve za šifriranje i također dešifriranje poruka poslanih na njih.
Korištenje ovog pristupa simetričnog ključa naziva se simetrično šifriranje. "Simetrični" dio dolazi iz činjenice da je simetrični ključ na svakom računalu identičan. Ovaj pristup stvarno dobro funkcionira ... ali djeluje samo dok nijedno drugo računalo nema pristup simetričnom ključu.
Problem
Kako oba računala znaju što je simetrični ključ?
Jedno računalo moglo bi ga stvoriti i poslati u poruci putem interneta. Ali poruke još ne bi bile šifrirane, tako da bi svatko tko presreće poruke odmah imao simetrični ključ ... i mogao bi dešifrirati sve buduće komunikacije. To je loše!
To se ponekad naziva problemom „razmjene ključeva“. Jasno je da moramo dodati još jedan korak u postupak prije nego što počnemo koristiti simetrične tipke.
Rješenje
Rješenje gornjeg problema s "razmjenom ključeva" jest da oba računala međusobno dijele neke javne podatke (to je "javno" što znači da im ne smeta ako ih netko presretne) i kombiniraju ih s nekim informacijama na vlastitom računalu kako bi samostalno stvoriti identične simetrične ključeve.
Ovi se simetrični ključevi tada mogu koristiti u simetričnom šifriranju na gore navedeni način.
Kako ovo djeluje
Oba računala imaju svoj privatni i javni ključ. Zajedno čine par ključeva . Računala međusobno dijele svoje javne ključeve putem Interneta. Dakle, u ovom trenutku procesa svako računalo zna
- vlastiti privatni ključ,
- vlastiti javni ključ,
- i javni ključ drugog računala.
Generiranje simetričnih ključeva
Oba računala zatim koriste ta 3 podatka za samostalno generiranje identičnog simetričnog ključa.
Svako računalo koristi matematički algoritam koji koristi 3 gore navedena ulaza. Ovaj algoritam dio je Diffie-Hellman-ovog algoritma razmjene ključeva. Algoritam koji će se izvršiti na svakom računalu je otprilike ovako:
Hostpub_2 = other computer's public keypub_1 = my public keypri_1 = my private key
f(pub_2, pub_1, pri_1) = abcdefg // Symmetric Key
Client:f(pub_1, pub_2, pri_2) = abcdefg // Symmetric Key
Ovdje je važno oduzeti činjenica da su računala putem interneta dijelila samo javne podatke , ali još uvijek su mogla stvoriti simetrične ključeve!
Pristup korištenju parova ključeva i dijeljenju javnih podataka za generiranje identičnih simetričnih ključeva naziva se asimetrična enkripcija . Zove se 'asimetrično' jer oba računala počinju sa svojim vlastitim, različitim parovima ključeva.
Do sada: vidjeli smo kako koristiti asimetričnu enkripciju za samostalno generiranje identičnih simetričnih ključeva na oba računala na siguran način (rješavanje problema razmjene ključeva), a zatim sigurnu razmjenu podataka između računala pomoću simetričnih ključeva za šifriranje i dešifriranje.
Verifikacija
Tako možemo sigurno komunicirati. No sljedeći je dio postupka uspostavljanja SSH sesije provjera da podaci nisu neovlašteno funkcionirani tijekom prijenosa i da je drugo računalo zapravo ono što jest i kaže da jest.
Zašto nam ovo treba?
Drugo računalo moglo bi se lažno predstavljati za jedno od računala i pokrenuti gornju zamjenu ključeva. Pa kako možemo sigurno shvatiti da je poruka zapravo s drugog računala, a ne od varalice?
Raspršivanje
Moramo koristiti hash funkciju. Ovo je samo matematička funkcija koja uzima ulaze i stvara niz fiksne veličine.
Važna značajka ove funkcije je da je gotovo nemoguće utvrditi koji su ulazi samo koristili izlaze.
Nakon što klijent i domaćin generiraju svoje simetrične ključeve, klijent će koristiti funkciju raspršivanja za generiranje HMAC-a. Ovo samo znači "kod za provjeru autentičnosti poruke temeljen na raspršivanju". Ovo je samo još jedan niz znakova / brojeva. Klijent će poslati ovaj HMAC poslužitelju na provjeru.
Sastojci funkcije raspršivanja su
- Simetrični ključ na klijentu
- Redni broj paketa (svaka poslana poruka sadržana je u "paketu" podataka)
- Sadržaj (šifrirane !!!) poruke
Primjer s lažnim podacima:
symm_key = abcdefgpkge_no = 13encr_message = encrypted_password
Hash(symm_key, pkge_no, encr_message) = *HMAC* // Hashed value
Kako domaćin koristi ove podatke?
Kad domaćin primi HMAC, može koristiti istu hash funkciju s ova tri sastojka:
- vlastitu kopiju (identičnog!) simetričnog ključa,
- redni broj paketa,
- i šifriranu poruku.
Ako je izračunana raspršena vrijednost jednaka HMAC-u koju je primio od klijenta, tada smo provjerili je li povezujuće računalo isto kao računalo koje ima simetrični ključ.
Imajte na umu da samo domaćin i klijent znaju što je simetrični ključ, a niti jedno drugo računalo to ne zna!
Dakle, ovdje nije važno što domaćin ne zna dešifrirani sadržaj šifrirane poruke - domaćin je još uvijek potvrdio identitet računala za povezivanje!
Ljepota ovog pristupa je u tome što nismo samo provjerili identitet klijenta i osigurali da podaci nisu neovlašteno izvršeni, već smo to učinili sigurno ( bez dijeljenja bilo kakvih privatnih podataka) .
Sažetak: koristili smo hash funkciju na klijentu, a zatim na hostu kako bismo provjerili cjelovitost podataka i identitet klijenta.

Ovjera
Posljednji dio sigurne komunikacije s udaljenim računalima je:
čak i ako smo generirali simetrične ključeve s povezanim računalom i
čak i ako koristimo simetrične tipke za sigurnu komunikaciju i
čak i ako je računalo za povezivanje zaista klijent kojeg očekujemo, a ne varalica,
tada smo postavili SSH sesiju ... ali ima li računalo za povezivanje dozvolu za pristup sadržaju hosta?
To se naziva 'provjera autentičnosti': postupak provjere dozvola i prava pristupa.
Postoje dva načina provjere autentičnosti:
1 - Korištenje lozinke
Klijent može domaćinu poslati (šifriranu) poruku koja sadrži lozinku. Domaćin može dešifrirati poruku i provjeriti lozinku u bazi podataka kako bi provjerio ima li klijent dopuštenje za pristup navedenom 'korisniku' (područje računala). Posao završen.
2 - Korištenje parova ključeva i asimetričnog šifriranja
Ranije smo vidjeli kako asimetrično šifriranje može koristiti dva para ključeva za sigurno generiranje identičnih simetričnih ključeva i na klijentu i na hostu. Koristeći slične ideje, klijent se može prijaviti bez lozinke .
Ovo je pristup na visokoj razini načinu rada procesa:
Postavljanje:
Na klijentu se uputite prema terminalu i upotrijebite naredbu za generiranje javnog i privatnog ključa (ispod površine koristi 'RSA', matematički algoritam) na klijentu. Kopirajte javni ključ (NE privatni ključ!) U međuspremnik.
Ponavljam: kopirajte JAVNI ključ ( NE PRIVATNI KLJUČ!) U međuspremnik.
Zatim u terminalu na klijentu upotrijebite lozinku za daljinsku prijavu na hosta. Zalijepite javni ključ klijenta u odgovarajuću mapu na hostu uz sve ostale javne ključeve.
E sad, domaćin je
- To je vlastiti par javnih / privatnih ključeva
- Javni ključ klijenta
Gledajući gornji odjeljak o algoritmu razmjene ključeva, možete vidjeti kako domaćin ima sve sastojke potrebne za generiranje simetričnog ključa!
Izazovno:
Kada se klijent želi povezati, domaćin može upotrijebiti izdavanje 'izazova' slanjem poruke koja je šifrirana (simetričnim ključem hosta) i reći: 'Odobrit ću vam pristup samo ako možete dešifrirati ovu poruku!'.
Klijent tada ima
- vlastiti javni i privatni ključ
- javni ključ domaćina
- šifrirana poruka
Dakle, sada klijent ima sve potrebno za generiranje (identičnog) simetričnog ključa ... i dešifriranje poruke! Može dešifrirati poruku i domaćinu poslati potvrdu koja je 'uspjela' u izazovu.
Domaćin je zadovoljan što je povezujući klijent ovlašten i daje odobrenje za pristup.
Zašto se mučiti s drugim pristupom?
To se smatra sigurnijim od jednostavnog korištenja lozinke, jer bot može koristiti pristup "grube sile" kako bi nastavio koristiti mnoštvo kombinacija za pogađanje lozinke, ali neće imati ispravne parove ključeva da bi drugi pristup djelovao.
Daljnje čitanje:
SSH Vodič za početnike - Kako SSH djeluje
SSH, ili Secure Shell, protokol je udaljene administracije koji korisnicima omogućuje kontrolu i izmjenu njihovih udaljenih poslužitelja ... www.hostinger.com
//www.udemy.com/the-complete-junior-to-senior-web-developer-roadmap/
Zaključak
SSH je važan alat koji se koristi za daljinsko upravljanje drugim računalima.
SSH je siguran jer oba računala mogu šifrirati i dešifrirati poruku koristeći identične simetrične ključeve (poznate kao 'simetrična enkripcija').
Glavni koraci za pokretanje SSH sesije su:
- Postavljanje šifriranog kanala. Korištenje asimetrične enkripcije za rješavanje problema razmjene ključeva koji neovisno generira identične simetrične ključeve na oba računala bez dijeljenja bilo kakvih privatnih podataka.
- Provjera: Korištenje raspršivanja na oba računala za provjeru identiteta povezanog računala
- Provjera (ponovno). Korištenje raspršivanja na oba računala za provjeru integriteta podataka nije ugroženo u prijenosu.
Tada SSH možemo koristiti za sigurno slanje podataka između računala. Jedan važan primjer ove upotrebe je provjera autentičnosti. Iako možete koristiti lozinku, korištenje asimetrične enkripcije za provjeru povezujućeg 'klijenta' ima li dozvolu za pristup 'hostu' smatra se sigurnijim.
Ako ste zainteresirani za povišenje nivoa SSH-a, ozbiljno preporučujem ovaj tečaj. Učinilo mi se korisnim izoštriti neke svoje vještine! ( izjava o odricanju odgovornosti: Nemam veze ili veze s autorom ili platformom. Prije nekog vremena pohađao sam tečaj i smatrao sam ga jako dobrim!)
Hvala na čitanju!