Ssh (Linux)

Iz MaFiRaWiki

Ta članek ali del članka je v delu. Veseli bomo, če ga boste dopolnili in popravili.

Kaj pomeni to opozorilo?

Vsebina


Ssh (Secure shell) je komunikacijski protokol za varno povezavo med dvema računalnikoma. To je tudi program, s katerim se povežemo na oddaljeni računalnik.

Program ssh nadomesti starejše programe za oddaljeni dostop do računalnika, kot so rlogin, rsh in telnet, saj nudi varno kriptirano komunikacijo med dvema računalnikoma na nezavarovanrem omrežju. S ssh lahko preusmerimo tudu povezave X11 in ustvarjamo varne TCP/IP "tunele".

Ssh se poveže in prijavi na navedenega gostitelja (hostname), po potrebi z uporabniškim imenom. Uporabnik mora potrditi identiteto na oddaljenem računalniku s pomočjo ene od različnih metod, ki je odvisna od tega, katero verzijo protokola uporabljamo. V ukazni vrstici lahko podamo ukaz, ki naj ga izvede ssh na oddaljenem računalniku. Če ukaza ne podamo, se odpre ukazna lupina oddaljenega računalnika.

Sintaksa

ssh [-1246AaCfgkMNnqsTtVvXxY] [-b naslov_vezave]  [-c cipher_spec]  [-D vrata]  [-e ubezni_znak]  [-F configfile]  
[-i identity_file]  [-L [naslov_vezave:]vrata:gostitelj:gostiteljevaVrata]  [-l login_name]  [-m mac_spec]  [-O ctl_cmd]  
[-o option]  [-p vrata]  [-R [naslov_vezave:]vrata:gostitelj:gostiteljevaVrata]  [-S ctl_pot]  [uporabnik@]gostitelj [ukaz]

SSH Verzija 1

Avtentikacija z /etc/hosts.equiv

Uporabnik se sme takoj prijaviti, če je računalnik, od koder se uporabnik prijavlja, naveden v / na oddaljenem računalniku na /etc/hosts.equiv ali /etc/ssh/shosts.equiv in so uporabniška imena identična na obeh straneh. Če v mapi home oddaljenega računalnika obstajata .rhosts ali .shosts in vsebujeta vrstico z imenom klienta računalnika in imenom uporabnika tega računalnika, se uporabnik lahko prijavi. Uporaba samo te metode avtentifikacije običajno ni dovoljena na serverju, saj ne zagotavlja varnosti.

Avtentifikacija z $HOME/.hosts.equiv

Pri tej metodi kombiniramo metodo rhosts ali hosts.equiv z avtentifikacijo gostitelja na osnovi RSA. Prijava je dovoljena, če prijavo dovoli $HOME/.rhosts , $HOME/.shosts , /etc/hosts.equiv ali /etc/ssh/shosts.equiv , in če server dodatno lahko preveri gostiteljski ključ klienta (client's host key) - glej /etc/ssh/ssh_known_hosts in $HOME/.ssh/known_hosts v sekciji FILES. Ta avtentifikacijska metoda vključuje varnostne prepreke proti slepljenju IP-naslova, DNS-naslova in routinga. [Za administratorja: /etc/hosts.equiv , ~/.rhosts in rlogin/rsh protokol v splošnem, že po svoji naravi nista varna in jih je potrebno onemogočiti, če želimo zagotoviti varnost.]

Avetentifikacija z RSA

ssh podpira avtentifikacijo na osnovi RSA. Shema temelji na kriptografiji javnega ključa: obstajajo kriptosistemi, kjer enkripcija in dekripcija uporabljata ločena ključa, torej dekripcijski ključ ne more izhajati iz enkripcijskega. Eden od takih sistemov je RSA. S tem je mišljeno, da vsak uporabnik naredi par ključev (privatni+javni) za avtentifikacijske namene. Server pozna javni ključ, privatnega pa le uporabnik.

Datoteka ~/.ssh/authorized_keys vsebuje seznam javnih ključev, ki dovoljujejo prijavo. Ko se uporabnik prijavi, ssh program pove serverju kateri par ključev želi avtentifikacijo. Server preveri, če je ta ključ dovoljen in če je dovoljen, pošlje uporabniku oz. ssh-programu (pravzaprav se ssh program zažene na zahtevo uporabnika) izziv, t. j. naključno število, zašifrirano s pomočjo uporabnikovega javnega ključa. Izziv oz. naključno število se lahko odšifrira le s pomočjo ustreznega privatnega ključa. Klient uporabnika nato odšifrira naključno število s pomočjo privatnega ključa. S tem uporabnik dokaže strežniku, da pozna privatni ključ, brez da bi le tega serverju razkril.

ssh ima avtomatično vgrajen RSA avtentifikacijski protokol. Uporabnik napravi svoj par RSA ključev, s pomočjo ssh-keygen(1). Ta shrani privatni ključ v ~/.ssh/identity, javni ključ pa shrani v ~/.ssh/identity.pub v home mapo uporabnika. Uporabnik mora nato identity.pub kopirati v ~/.ssh/authorized_keys v svojo home mapo na oddaljenem računalniku (datoteka authorized_keys ustreza konvencionalni datoteki ~/.rhosts in ima v vsaki vrstici en ključ, vrstice pa so lahko zelo dolge). Nato pa se uporabnik lahko prijavlja brez gesla. RSA avtentifikacija je bistveno bolj varna kot rhosts avtentifikacija.

Najbolj enostavna RSA avtentifikacija je avtentifikacija s pomočjo „avtentifikacijskega agenta“ ssh-agent(1).

Če drugih avtentifikacijskih metod ni na voljo, ssh zahteva od uporabnika geslo. Geslo se pošlje na oddaljen računalnik zaradi preverjanja. Ker pa so vse komunikacije zašifrirane, gesla nek neznanec v mreži ne more videti.

SSH Verzija 2

Če uporabljamo SSH protokol – verzija 2 so na voljo podobne avtentifikacijske metode. Pri uporabi privzetih vrednosti PreferredAuthentications se bo klient najprej skušal avtentificirati s pomočjo metode na osnovi gostitelja. Če ta metoda ne bo uspešna, klient poskusi metodo avtentifikacije s pomočjo javnega ključa. Če pa se se tudi ta metoda izkaže kot neuspešna, klient uporabi interaktivno metodo z vpisovanjem gesla.

Metoda z javnim ključem je podobna avtentifikaciji na osnovi RSA, ki je opisana zgoraj. Dovoljuje uporabo RSA ali DSA ključa: klient uporabi svoj privatni ključ, ~/.ssh/id_dsa ali ~/.ssh/id_rsa za podpis identifikatorja seje, nato pa pošlje rezultat serverju. Server preveri, če je naveden javni ključ naveden v ~/.ssh/authorized_keys in nato pa zagotovi vstop, če sta oba ključa najdena in je podpis pravilen. Identifikator seje izhaja iz vrednosti „shared Diffie-Hellman“, poznata pa ga le klient in server.

Če avtentifikacija z javnim ključem ni uspešna ali pa ni na voljo, klient lahko pošlje zašifrirano geslo v oddaljen računalnik, da preveri identiteto uporabnika.

Poleg tega ssh podpira avtentifikacijo s pomočjo gostitelja ali izziva.

Protokol 2 nudi tudi dodatne mehanizme za zagotavljanje diskretnosti (promet uporablja šifriranje z AES, 3DES, Blowfish, CAST128 ali Arcfour) in popolnosti (hmac-md5, hmac-sha1, hmac-ripemd160).

Pozor: protokolu - verzija 1 primanjkuje močan mehanizem za zagotavljanje popolnosti povezave.

Prijavljanje in izvajanje na oddaljenem računalniku

Če je server potrdil uporabnikovo identiteto, server bodisi izvede dani ukaz ali pa prijavi na računalnik in da uporabniku na voljo običajno lupino na oddaljenem računalniku. Vsa komunikacija z oddaljenim ukazom ali lupino se samodejno zašifrira.

V primeru, da je dodeljen psevdo terminal (običajna prijavna seja), uporabnik lahko uporablja ubežne znake, ki so navedeni spodaj na terminalu.

Če pa ni bil dodeljen psevdo - tty, potem je seja transparentna in jo lahko uporabljamo za zanesljiv prenos binarnih podatkov. Večina sistemov, ki ima nastavljen ubežni znak na „ none“, prav tako napravi sejo transparentno, čeprav uporabljamo tty.

Seja se prekine, če uporabnik zapusti ukaz ali lupino na oddaljenem računalniku in se vse X11 in TCP/IP povezave zaprejo. Izhodni status oddaljenega programa je javljen kot izhodni status na ssh-ju.

Ubežni znaki

Če uporabljamo psevdo terminal, ssh podpira številne funkcije s pomočjo uporabe ubežnega znaka.

Za izpis tilde napišemo ~~. Če pa se takoj za tildo pojavi znak, ki ne nastopa v kombinacijah navedenih spodaj, uporaba dveh tild ni potrebna. Ubežni znak mora vedno slediti v novi vrstici, da ga lahko interpretiramo kot posebni znak.

Nastavitve ubežnega znaka lahko spremenimo v konfiguracijskih datotekah z uporabo EscapeChar configuration directive ali pa v ukazni vrstici s pomočjo ukaza [-e option].

Podprti ubežni znaki (vključno s privzeto " ~ "):

~. Odjava.
~^Z Pošiljanje ssh-ja v ozadje.
~# Seznam posredovanih povezav.
~& Pošlji ssh v ozadje ob odjavi, ko čakamo na posredovano povezavo / odjavo X11 seje.
~? Izpis seznama ubežnih znakov.
~B Pošiljanje BREAK na oddaljeni sistem (uporabno samo za SSH protokol - verzija 2 in če to podpira peer).
~C Odpiranje ukazne vrstice (uporabno le za dodajanje posredovanj vrat s pomočjo -L in -R opcij).
~R Zahteva za povezavo z novim ključem (uporabno samo za SSH protokol - verzija 2 in če to podpira peer).

X11 in TCP posredovanje

Če je spremenljivka ForwardX11 nastavljena na "yes" (glej tudi opis [-X] ali [-x options] v nadaljevanju besedila) in uporabnik uporablja X11 (spremenljivka za okensko okolje je nastavljena), se povezava za X11 okno samodejno posreduje na oddaljen strežnik tako, da gredo vsi X11 programi, ki se zaženejo iz lupine (ali ukaz-a) preko zašifriranega kanala. Povezava na pravi X strežnik se zgodi na lokalnem računalniku. Uporabnik ne sme manualno nastavljati nastavitev zaslona. Posredovanje X11 povezav lahko nastavimo v ukazni vrstici ali v nastavitvenih datotekah.

Zaslonske vrednosti, nastavljene v ssh, bodo kazale na strežnik, vendar mora biti številka zaslona večja od nič. To je običajno in se zgodi, ker ssh ustvari "proxi" X strežnik na strežniku za posredovanje povezav preko šifriranega kanala.

ssh prav tako samodejno nastavi Xauthority podatke na strežniku. V ta namen generira naključen avtorizacijski piškotek, ga shrani v Xauthority na strežniku in preveri, da vse posredovane povezave prenašajo ta piškotek in ga zamenjajo s pravim piškotkom, ko se povezava odpre. Pravi avtentifikacijski piškotek pa se nikoli ne pošlje na strežnik (in noben piškotek se ne pošlje v nešifrirani obliki).

Če je spremenljivka ForwardAgent nastavljena na "yes" (glej tudi opis [-A] ali [-a options] v nadaljevanju besedila) in uporabnik uporablja "avtentifikacijskega agenta", se povezava do agenta samodejno posreduje na oddaljen strežnik.

Posredovanje poljubnih TCP/IP povezav preko varnega kanala lahko nastavimo v ukazni vrstici ali v nastavitveni datoteki. Ena od možnih povezav za TCP/IP je varna povezava na elektronsko denarnico, druga pa poteka preko požarnih zidov.

Avtentifikacija strežnika

ssh samodejno vodi in preverja podatkovno bazo, vključno z identifikacijo za vse gostitelje, ki so bili kadarkoli v uporabi. Gostiteljevi ključi so shranjeni v datoteki $HOME/.ssh/known_hosts v mapi home uporabnika. Poleg tega se v datoteki /etc/ssh_known_hosts samodejno preverjajo znani gostitelji. Vsak nov gostitelj je samodejno dodan v uporabnikovo datoteko. Če se identifikacija gostitelja kdaj spremeni, ssh na to opozori in onemogoči avtentifikacijsko geslo z namenom, da bi preprečil trojanskemu konju pridobitev uporabnikovega gesla. Taisti mehanizem je namenjen tudi zaščiti pred napadi „z napadalcem vmes“ (angl. man-in-the-middle attack), ki bi v nasprotnem primeru lahko omejevali šifriranje. Opcijo StrictHostKeyChecking lahko uporabljamo za zaščito prijav na računalnike, katerih gostiteljev ključ ni znan ali pa se je spremenil.

Nastavitve

-1 Prisili ssh, da poskusi le protokol - verzija 1.
-2 Prisili ssh, da poskusi le protokol - verzija 2.
-4 Prisili ssh, da uporablja le IPv4 naslove.
-6 Prisili ssh, da uporablja le IPv6 naslove.
-A Omogoča posredovanje povezav avtentifikacijskega agenta. To lahko natančneje opredelimo na osnovi gostitelja v nastavitveni datoteki.
Posredovanje agenta je potrebno omogočiti s previdnostjo. Uporabniki, ki imajo možnost, da zaobidejo datotečne pravice na oddaljenem gostitelju, lahko dostopajo do lokalnega agenta preko posredovane povezave. Napadalec ne more dobiti podatkov o ključu / ključih od agenta, lahko pa izvaja operacije na ključih, ki mu omogočajo avtentifikacijo s pomočjo identitet naloženih v agentu.
-a Onemogoča posredovanje povezav avtentifikacijskega agenta.
-b naslov_vezave Naslov vezave uporabljamo na lokalnem računalniku kot izvorni naslov povezave - uporabno le na sistemih z več kot enim naslovom.
-C Zahteva stiskanje vseh podatkov (vključno s stdin, stdout, stderr in podatki za posredovanje X11 in TCP/IP povezav). Algoritem za stiskanje je isti kot za gzip(1), stopnjo pa lahko nadzorujemo s pomočjo opcije CompressionLevel pri porotokolu - verzija 1. Kompresija je zaželena na linijah, ki se povezujejo preko modema, in ostalih počasnih povezavah, pri hitrih povezavah pa upočasnjujejo povezavo. Privzeto vrednost lahko nastavljamo na osnovi "host-by-host" v nastavitvenih datotekah (glej tudi možnosti stiskanja - Compression option).
-c blowfish | 3des | des Izbere kodo za kodiranje seje. Privzeto uporablja 3des, za katero se predvideva, da je varna. 3des (triple-des) je šifrirno-dešifrirna-šifrirna trojica (angl. triple) s tremi različnimi ključi. blowfish je fast block šifra; izgleda zelo varno in je bistveno hitrejša kot 3des šifra. Uporaba te je močno odsvetovana zaradi kriptografskih šibkosti.

Vir

  • man_ssh
Osebna orodja