Natrag na blog

Pregled SSH-a – SSH poslužitelji, klijenti i ključevi

Pregled SSH-a – SSH poslužitelji, klijenti i ključevi

Kada je riječ o udaljenom računalstvu, SSH je jedan od najpopularnijih i najsigurnijih protokola. SSH je kriptografski mrežni protokol koji uspostavlja sigurnu vezu s udaljenim uređajima. Nakon povezivanja s udaljenim uređajem, korisnik može pokretati naredbe u udaljenoj ljusci. SSH je najčešći među mrežnim i sistemskim administratorima.

Ovaj vodič u stilu podsjetnika prikazuje pregled SSH-a, neke uobičajene načine povezivanja putem SSH-a i različite SSH konfiguracije.

Pregled SSH-a

SSH je akronim za Secure Shell. Neki također nazivaju SSH i Secure Socket Shell. SSH je najčešći način pristupa udaljenom poslužitelju. Prilikom povezivanja na udaljeni sustav pomoću SSH-a, povezujete se na postojeći račun. Nakon povezivanja, imat ćete pristup sesiji ljuske. Sve pokrenute naredbe izvršit će se na udaljenom računalu, a izlaz će se ispisati na vašem lokalnom terminalu.

SSH veza slijedi model klijent-poslužitelj. Na udaljenom sustavu mora biti pokrenut SSH daemon kako bi prihvaćao udaljene SSH veze. SSH daemon sluša određene portove, autentificira zahtjeve za povezivanje i generira odgovarajuće okruženje kada su uvjeti ispunjeni.

Za ovaj vodič, konfigurirali dva Ubuntu poslužitelja. Primarni poslužitelj bit će konfiguriran za povezivanje s sekundarnim poslužiteljem. Sekundarni poslužitelj bit će konfiguriran za prihvaćanje SSH veza s primarnog poslužitelja. Ove IP adrese poslužitelja koristit će se u cijelom vodiču:

  • Primarni: 31.171.250.121

  • Sekundarni: 31.171.250.130

Za početak, možete pogledati naše detaljne vodiče o tome kako koristiti SSH za povezivanje s udaljenim poslužiteljem u Ubuntuu i kako konfigurirati svoj Linux poslužitelj za korištenje autentifikacije temeljene na SSH ključevima. Sada, počnimo!

SSH autentifikacija

Postoje dvije glavne vrste SSH autentifikacije. Tradicionalna metoda je korištenje lozinke. Manje je sigurna i izričito se ne preporučuje. Druga metoda su SSH ključevi. SSH ključevi nude vrlo visoku sigurnost i izričito se preporučuju.

Iako je autentifikacija lozinkom jednostavnija za razumijevanje i konfiguraciju, lako ju je iskoristiti. Na primjer, automatizirani botovi mogu koristiti grubu silu (brute force) za provaljivanje u sustav. SSH ključevi su kriptografski ključevi. Svaki ključ ima dva dijela – privatni ključ i javni ključ. Javni ključ se može dijeliti bilo gdje bez ikakve brige. Međutim, privatni ključ mora ostati zaštićen.

Kako bi se SSH ključevi koristili kao metoda autentifikacije, na udaljenom sustavu mora biti instalirana kopija javnog ključa. Kopije privatnih i javnih kljeva također bi trebale biti instalirane na lokalnom sustavu. Prema zadanim postavkama, javni ključevi su navedeni u sljedećoj datoteci. Svaki jedinstveni korisnik ima jedinstvenu kopiju ove datoteke:

Evo kako funkcionira proces autentifikacije:

  • Klijentski sustav šalje zahtjev za povezivanje udaljenom sustavu. Također šalje informaciju o tome koji SSH ključ koristiti.

  • Udaljeni sustav provjerava nalazi li se javni ključ u datoteci authorized_keys.

  • Ako ključ postoji, generira se nasumični niz znakova i šifrira se pomoću javnog ključa. Šifrirana poruka može se dešifrirati samo pomoću privatnog ključa.

  • Nakon primitka niza, klijent će dešifrirati niz.

  • Kombiniranjem niza i prethodno dogovorenog ID-a sesije generira se MD5 hash. Klijent šalje MD5 hash udaljenom sustavu.

  • Udaljeni sustav zna nasumični niz i ID sesije. Ako se MD5 hash podudara, veza je dopuštena.

SSH ključevi

U ovom vodiču, SSH ključ će biti primarni fokus autentifikacije. Stoga će se ovaj odjeljak usredotočiti na to kako raditi s SSH ključevima.

  • Generiranje para SSH ključeva

Prema zadanim postavkama, Linux sustav nema instaliran SSH ključ. Međutim, sustav može sadržavati prethodno generirane/instalirane SSH ključeve. Pod pretpostavkom da nema prethodnog SSH ključa, moramo generirati novi par javnog i privatnog SSH ključa. SSH podržava mnoge kriptografske algoritme za generiranje SSH ključeva, na primjer, RSA, DSA, ECDSA i EdDSA. RSA je zadani i preferirani algoritam.

  • Generiranje normalnog para RSA ključeva

Za generiranje para SSH ključeva pokrenite sljedeću naredbu:

SSH Keygen

Upit će vas pitati gdje želite pohraniti par ključeva. Kao što je spomenuto, to će biti RSA par ključeva. Ako se ne unese nikakva vrijednost, SSH će ga spremiti na zadano mjesto /home/demo/.ssh/id_rsa.

Sljedeći korak je unos pristupne lozinke. Preporučuje se korištenje pristupne lozinke. Duljina pristupne lozinke je proizvoljna. Ona dodaje sloj sigurnosti. Međutim, SSH omogućuje generiranje ključeva bez ikakve pristupne lozinke. Samo pritisnite Enter ako želite ključeve bez pristupne lozinke.

Konačni izlaz pruža sljedeće ključne informacije:

  1. Lokacija privatnog ključa ( /root/.ssh/id_rsa). Nikada se ne bi trebao dijeliti.

  2. Lokacija javnog ključa ( /root/.ssh/id_rsa.pub). Sigurno ga je dijeliti s bilo kime.

  3. Otisak ključa.

  4. Nasumična slika ključa. Ideja je da, ako dođe do kompromitacije ključeva, to vjerojatno možete uočiti primijetivši bilo kakvu promjenu u slici ključa.

  • Generiranje RSA para ključeva s različitim bitovima

Prema zadanim postavkama, SSH ključevi su od 2048 bita. Za sigurnost se to smatra dovoljno dobrim. Međutim, možemo ručno odrediti korištenje drugačijeg broja bitova. Što je veća vrijednost bita, to je ključ jači.

Pokrenite sljedeću naredbu za generiranje SSH para ključeva od 4096 bita. Većina poslužitelja podržava SSH ključeve od 4096 bita. Ako je ključ prevelik, možda neće biti prihvaćen radi zaštite od DDoS napada:

SSH Keygen with bitsBudući da smo već generirali par ključeva, SSH će pitati želite li prepisati prethodni. Ostatak postupka je isti kao i generiranje normalnog para ključeva.

  • Promjena pristupne lozinke privatnog ključa

Možemo promijeniti pristupnu lozinku privatnog ključa. Postupak zahtijeva da znate trenutnu pristupnu lozinku. Za promjenu pristupne lozinke pokrenite sljedeću naredbu:

SSH Keygen Password Change

Naredba će vas tražiti da unesete lokaciju privatnog ključa. Pritisnite Enter ako je ključ pohranjen na zadanoj lokaciji. Unesite trenutnu pristupnu lozinku. Ako je prihvaćena, možete odrediti novu.

  • Prikazivanje otiska SSH ključa

Svaki par SSH ključeva dijeli kriptografski otisak. Ovaj se otisak može koristiti za identifikaciju jedinstvenih ključeva. Može biti koristan u brojnim situacijama. Pokrenite sljedeću naredbu kako biste provjerili otisak SSH ključa:

SSH Key Fingerprint

Unesite lokaciju ključa. Pritisnite Enter ako je ključ pohranjen na zadanoj lokaciji.

Kopiranje javnog ključa

Par SSH ključeva spreman je za osiguranje udaljenih veza. Kako bi udaljeni sustav prihvatio SSH ključ za autentifikaciju, mora imati kopiju javnog ključa. Postoji više načina za kopiranje javnog ključa na udaljeni poslužitelj.

  • Korištenje ssh-copy-id

Alat ssh-copy-id dolazi kao dio OpenSSH paketa. To je zadani način kopiranja SSH javnog ključa. Jednostavan je i lak za korištenje. Pokrenite sljedeću naredbu za prijenos kopije javnog ključa:

SSH Copy ID

Za dovršetak postupka potrebna vam je lozinka za udaljeni korisnički račun. Ako bude uspješno, prikazat će se poruka o uspjehu.

  • Korištenje SSH veze

Ako korištenje alata ssh-copy-id nije dostupno, ali se primarni poslužitelj može povezati s sekundarnim poslužiteljem pomoću SSH-a, tada možemo upotrijebiti drugačiji trik za kopiranje ključa. To je slanje sadržaja javnog ključa putem SSH naredbe na udaljenu stranu. Imajte na umu da ako direktorij ~/.ssh ne postoji na udaljenom sustavu, to možda neće raditi:

SSH Copy

  • Ručno kopiranje

Ako udaljena veza nije opcija, jedini preostali postupak je ručno dodavanje javnog ključa na udaljeni poslužitelj. Prvo dohvatite sadržaj javnog ključa:

Na udaljenom poslužitelju postavite ključ na odgovarajuće mjesto:

Korištenje SSH-a

Sada kada je javni ključ postavljen, spremni smo koristiti SSH za daljinsko povezivanje.

  • Povezivanje s daljinskim sustavom

Prvi korak je učenje kako se povezati s daljinskim sustavom pomoću SSH-a. Pretpostavlja se da i lokalni i daljinski sustav dopuštaju SSH promet. Za povezivanje s daljinskim sustavom upišite sljedeće:

SSH Login Without User

Za povezivanje s određenim korisnikom na daljinskom poslužitelju, umjesto toga upotrijebite sljedeću strukturu:

SSH Login with User

Ako se prvi put povezujete s poslužiteljem, SSH može prikazati upozorenje. Unesite yes za nastavak povezivanja. Ako je daljinski račun zaštićen lozinkom, morat ćete unijeti lozinku. Ako je SSH ključ zaštićen lozinkom (passphrase), također morate unijeti tu lozinku.

  • Povezivanje na drugi port

Prema zadanim postavkama, SSH radi na portu 22. SSH klijent će pretpostaviti zadanu vrijednost porta prilikom povezivanja s daljinskim sustavom. Međutim, ako daljinski sustav sluša na drugom portu za SSH promet, to neće raditi. U takvoj situaciji moramo ručno odrediti broj porta. Za određivanje specifičnog porta upotrijebite -p zastavicu:

Ručno određivanje porta svaki put je kontraproduktivno. Možemo trajno promijeniti zadanu vrijednost porta. Da biste to učinili, otvorite SSH konfiguracijsku datoteku. Ako datoteka ne postoji, sljedeća naredba će je stvoriti:

Zatim dodajte sljedeće retke:

  • Izvršavanje naredbi na daljinskom poslužitelju

Sada kada je veza uspostavljena, svaka naredba koju pokrenete na lokalnom terminalu ići će na daljinski poslužitelj. Svaki generirani izlaz bit će poslan na lokalni terminal.

Ako se radi o jednoj naredbi koju treba pokrenuti, možemo je pokrenuti bez potpunog SSH prijave. Možemo jednostavno navesti naredbu nakon upute za SSH povezivanje:

  • Dodavanje ključa u SSH agent

Ako SSH ključ ima lozinku (passphrase), tada ćete svaki put kada se povezujete s daljinskim sustavom morati unijeti tu lozinku. Ponavljanje toga je kontraproduktivno. Možemo prepustiti SSH agentu da se pobrine za to. To je mali uslužni program koji pohranjuje privatni ključ nakon što unesete lozinku. Privatni ključ bit će dostupan tijekom sesije terminala. Za pokretanje SSH agenta pokrenite sljedeću naredbu:

SSH Agent

Program radi u pozadini. Sve što trebate je dodati svoj privatni ključ u agenta. Pokrenite sljedeću naredbu:

SSH Add

Unesite lozinku (passphrase) za dovršetak operacije.

  • Prosljeđivanje SSH vjerodajnica

Također možemo konfigurirati SSH za povezivanje s jednog poslužitelja na drugi bez lozinke. To može biti prilično učinkovito, posebno kada radite s brojnim daljinskim poslužiteljima. Da bismo to postigli, moramo proslijediti SSH vjerodajnice. Prosljeđivanje SSH vjerodajnica zahtijeva da daljinski poslužitelj bude konfiguriran za prihvaćanje veze s lokalnog računala/poslužitelja. Zatim se samo trebate povezati s prvim poslužiteljem pomoću -A zastavice. Ona prosljeđuje vaše vjerodajnice poslužiteljima za trenutnu sesiju:

Konfiguracije daljinskog poslužitelja

Ovaj odjeljak sadrži neke od uobičajenih konfiguracija na strani poslužitelja koje vam pomažu poboljšati odziv poslužitelja i sigurnost veze.

  • Onemogućavanje provjere autentičnosti lozinkom

Ako su SSH ključevi konfigurirani i SSH veza radi kako se očekuje, tada je sigurno onemogućiti provjeru autentičnosti lozinkom. Sljedeća konfiguracija prestat će tražiti lozinku kada se bilo koji korisnik poveže putem SSH-a. Na udaljenom poslužitelju otvorite sshd_config datoteku s root/sudo privilegijama:

Zatim potražite unos PasswordAuthentication. Ako je redak komentiran, odkomentirajte ga. Promijenite vrijednost u no:

Password Authentication Change

Spremite datoteku i zatvorite uređivač. Kako bi promjene stupile na snagu, ponovno pokrenite SSH uslugu:

Ako je sustav CentOS/Fedora, umjesto toga upotrijebite sljedeću naredbu:

  • Promjena SSH porta

Kao što je ranije spomenuto, SSH koristi port 22 za razmjenu SSH prometa. Međutim, prema nekim administratorima sustava, bolje je dodijeliti drugi port za SSH. To može pomoći protiv automatiziranih botova koji preplavljuju port. Da biste promijenili port koji SSH sluša, otvorite sshd_config datoteku:

Potražite unos Port. Ako je komentiran, odkomentirajte ga. Zatim promijenite vrijednost u drugu vrijednost. Vrijednost porta je neoznačeni 16-bitni cijeli broj (0-65535):

SSH Port Change

Spremite datoteku i zatvorite uređivač. Da biste primijenili promjenu, ponovno pokrenite SSH daemon:

Na CentOS/Fedora sustavu, umjesto toga pokrenite sljedeću naredbu:

  • Ograničenje korisnika

Možemo konfigurirati koji se korisnički računi mogu povezati pomoću SSH-a. To također uključuje prilagođavanje sshd_config datoteke. Otvorite datoteku sa sudo/root privilegijama:

Potražite unos AllowUsers. Dodajte dopuštene korisnike:

User Limitation

Spremite datoteku i zatvorite uređivač. Ponovno pokrenite SSH daemon kako bi promjene stupile na snagu:

Na CentOS/Fedora sustavu, umjesto toga pokrenite sljedeću naredbu:

  • Ograničenje grupa

Slično ograničenju korisnika, također možemo odrediti koja se grupa korisnika može povezati sa sustavom pomoću SSH-a. Otvorite sshd_config datoteku:

Upotrijebite unos AllowGroups za dodavanje određene grupe korisnika koja može koristiti SSH:

Allow User Groups

Spremite datoteku i zatvorite uređivač. Ponovno pokrenite SSH daemon kako bi promjene stupile na snagu:

Za CentOS/Fedora sustav, umjesto toga pokrenite sljedeću naredbu:

Imajte na umu da ako se bilo koji korisnik doda ili ukloni iz grupe korisnika, SSH daemon se mora ponovno pokrenuti. U suprotnom, promjene grupe neće stupiti na snagu.

  • Onemogućavanje prijave root korisnika

Ako imate pristup korisniku sa sudo privilegijama, preporučuje se onemogućiti prijavu root korisnika putem SSH-a. Otvorite sshd_config datoteku:

Promijenite vrijednost unosa PermitRootLogin u no:

Disable Root Login

Spremite datoteku i zatvorite uređivač. Ponovno pokrenite SSH daemon kako bi promjena stupila na snagu:

Na CentOS/Fedora sustavu, umjesto toga pokrenite sljedeću naredbu:

  • Prosljeđivanje prikaza X aplikacija

SSH daemon također može proslijediti prikaz X aplikacija s poslužitelja na klijent. Međutim, da bi ovo radilo, udaljeni sustav mora imati konfiguriran X windows sustav. Značajka također mora biti omogućena u SSH konfiguraciji. Otvorite SSH konfiguracijsku datoteku:

Promijenite vrijednost direktive X11Forwarding u yes:

X11 Forwarding

Spremite datoteku i zatvorite uređivač. Ponovno pokrenite SSH daemon kako bi promjena stupila na snagu:

Na CentOS/Fedora sustavima, umjesto toga pokrenite sljedeću naredbu:

Konfiguracije klijenta

U ovom odjeljku pogledajte neke od uobičajenih konfiguracija na SSH klijentu.

  • Informacije o vezi specifične za poslužitelj

Na lokalnom sustavu možemo definirati pojedinosti udaljene veze. Sve informacije pohranjene su u konfiguracijskoj datoteci koja se nalazi na ~/.ssh/config:

Svaki blok udaljenog sustava označen je ključnom riječju Host nakon koje slijedi alias. Sve direktive specifične za sustav idu ovdje. Prilikom povezivanja s udaljenim sustavom, SSH će ih automatski primijeniti. Za potpuno, detaljno objašnjenje konfiguracije, pogledajte man stranicu:

SSH Manual

Unos za udaljenu vezu imat će sljedeću strukturu:

  • Vremensko ograničenje veze

Može se dogoditi da se vaša SSH sesija prekine prije nego što budete spremni izvršiti bilo kakvu radnju. Ako klijent ne šalje nikakve pakete udaljenom poslužitelju, nakon nekog vremena veza istječe. Kako bismo izbjegli takve okolnosti, možemo konfigurirati lokalnog klijenta da povremeno šalje paket kako bi održao vezu aktivnom.

Otvorite lokalnu konfiguracijsku datoteku:

Ispod unosa za udaljenu vezu dodajte direktivu ServerAliveInterval nakon koje slijedi interval paketa u sekundama:

Server Alive Interval

Spremite datoteku i zatvorite uređivač.

  • Onemogućavanje provjere hosta

Prema zadanim postavkama, kad god se pokušava povezati s novim poslužiteljem, SSH klijent će prijaviti otisak prsta udaljenog SSH daemona. To je korisna značajka za provjeru autentičnosti hosta. Ako zlonamjerni akter pokuša lažirati udaljeni host, on će se pojaviti kao novi poslužitelj.

Onemogućavanje ove značajke može predstavljati ogroman sigurnosni rizik. Općenito, preporučuje se ostaviti ovu opciju uključenom. Međutim, u određenim situacijama onemogućavanje provjere hosta može biti praktično. Otvorite konfiguracijsku datoteku:

Ispod odjeljka za udaljeni host dodajte sljedeće direktive:

Disabling Host Checking

Prva direktiva će onemogućiti automatsko dodavanje novih hostova na popis poznatih hostova, pohranjenih u datoteci known_hosts. Druga direktiva služi tome da se ne upozorava na bilo kakve promjene. Spremite datoteku i zatvorite uređivač.

  • Multipleksiranje SSH-a preko jedne TCP veze

Ponekad uspostavljanje TCP veze može zahtijevati dosta vremena. Ako je potrebno uspostaviti više veza s istim računalom, multipleksiranje je izvrsna značajka koju možete iskoristiti. SSH multipleksiranje omogućuje korištenje iste TCP veze za više SSH sesija. To smanjuje dio opterećenja potrebnog za uspostavljanje novih sesija. Ograničavanje broja veza također može pomoći.

Možemo ručno postaviti multipleksiranu vezu ili dopustiti SSH-u da je koristi kad god je dostupna. Ovdje ćemo konfigurirati SSH da slijedi drugi put. Otvorite SSH konfiguracijsku datoteku:

Dodajte definiciju hosta s joker znakom na vrh datoteke. To osigurava da će se sljedeći skup direktiva primijeniti na sve udaljene veze. Dodajte sljedeće direktive:

Multiplexing SSH

Prva direktiva govori SSH-u da automatski koristi multipleksiranje kad god je dostupno. Druga direktiva uspostavlja putanju do kontrolnog socketa. Ovaj socket će se stvoriti kada se uspostavi prva sesija. Sljedeće sesije pratit će ovaj socket.

Zadnja direktiva govori SSH-u da dopusti da početna glavna veza bude u pozadini. Također označava da će se TCP veze automatski prekinuti jednu sekundu nakon posljednje SSH sesije. Zatim stvorite direktorij koji smo deklarirali u konfiguracijskoj datoteci:

Naposljetku, multipleksiranje bi trebalo biti aktivno.

SSH escape kodovi

Nakon uspostavljanja veze, postoje načini za kontrolu ponašanja veze pomoću escape kodova.

  • Prisilno prekidanje veze

Jeste li zapeli u SSH sesiji? SSH sesijama općenito upravlja poslužitelj. Ako poslužitelj ima problema, zapinjanje u mrtvoj SSH sesiji može biti frustrirajuće. Srećom, OpenSSH nudi korisne kontrole za upravljanje stanjem veze s klijentske strane.

Pritisnite Enter nekoliko puta. Zatim unesite sljedeću naredbu:

Forcing Disconnects

Ovdje je ~ kontrolni znak. Nakon pokretanja ove naredbe s klijenta, veza bi se trebala odmah zatvoriti.

  • SSH sesija u pozadini

Također možemo staviti SSH sesiju u pozadinu. Kada se stavi u pozadinu, vratit ćete se u uobičajenu sesiju ljuske. Nakon što završite s radom, možete se ponovno vratiti u SSH ljusku. Imajte na umu da morate imati ispravnu konfiguraciju vremenskog ograničenja kako biste izbjegli istek vremena dok SSH sesija ostaje u pozadini. Da biste SSH sesiju stavili u pozadinu, unesite kontrolni znak nakon kojeg slijedi Ctrl + Z:

SSH Background Session

Ako je to bio vaš najnoviji pozadinski zadatak, možete ga ponovno aktivirati pomoću sljedeće naredbe:

Ako postoji više pozadinskih zadataka, možemo ih odrediti s popisa poslova:

Jobs

Da biste ciljni posao doveli u prvi plan, zabilježite vrijednost posla iz prvog stupca. Zatim pokrenite sljedeću naredbu:

Job Foreground

  • Promjena konfiguracije prosljeđivanja portova

Koristeći kontrolni mehanizam, možemo mijenjati pravila prosljeđivanja portova u hodu. Nakon što se veza uspostavi, možemo stvoriti ili ukloniti pravila prosljeđivanja portova. To je dio SSH sučelja naredbenog retka.

Za pristup SSH sučelju naredbenog retka pokrenite naredbu:

SSH Command Line Interface

Za popis dostupnih opcija unesite sljedeću naredbu:

Ako je izlaz previše minimalan, pokušajte povećati razinu opširnosti pomoću sljedeće kontrolne naredbe:

Sada ponovno pokrenite naredbu -h:

SSH Command Line Help

Kao što izlaz objašnjava, prilično je jednostavno implementirati bilo koje prosljeđivanje portova jednostavnom naredbom. Na primjer, tunel se također može uništiti pomoću naredbe kill, što je označeno s K na popisu naredbi.

Završne misli

SSH je prilično uobičajen. Zato je učenje SSH-a vrlo korisno. Naš sveobuhvatni pregled SSH-a pokriva najvažnije SSH konfiguracije koje korisnici moraju znati za svakodnevnu upotrebu SSH-a. Nakon što ga savladate, trebali biste moći raditi s gotovo svim konfiguracijama SSH poslužitelja.

Ugodan rad na računalu!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev je kreativni dizajner u CloudSigma, usredotočen na dosljedan poslovni identitet korištenjem tradicionalnih i inovativnih marketinških kanala. Vješt je u spajanju umjetničke vizije sa strateškim marketingom kako bi stvorio dojmljive brendirane priče.

Komentari

Još nema komentara. Budite prvi.