SSH | |
---|---|
Nume | Shell securizat |
Nivel (conform modelului OSI ) | Aplicat |
Familie | TCP/IP |
Port/ID | 22/ TCP |
Scopul protocolului | Acces de la distanță |
Specificație | RFC 4251 |
Principalele implementări (clienți) | OpenSSH , PuTTY / KiTTY , SecureCRT , Xshell |
Implementări de bază ( servere ) | OpenSSH |
Fișiere media la Wikimedia Commons |
SSH ( ing. Security Shell - "secure shell" [ 1 ] ) este un protocol de rețea de nivel de aplicație care vă permite să controlați de la distanță sistemul de operare și conexiunile TCP de tunel (de exemplu, pentru a transfera fișiere). Funcționalitate similară cu protocoalele Telnet și rlogin , dar, spre deosebire de acestea, criptează tot traficul, inclusiv parolele transmise . SSH permite alegerea diferiților algoritmi de criptare. Clienții SSH și serverele SSH sunt disponibili pentru majoritatea sistemelor de operare în rețea.
SSH vă permite să transferați în siguranță aproape orice alt protocol de rețea într-un mediu nesigur . Astfel, puteți nu numai să lucrați de la distanță pe un computer printr-un shell de comandă , ci și să transmiteți un flux audio sau video pe un canal criptat (de exemplu, de la o cameră web ) [2] . SSH poate utiliza, de asemenea, compresia datelor transmise pentru criptarea ulterioară, ceea ce este convenabil, de exemplu, pentru lansarea de la distanță a clienților X Window System .
Majoritatea furnizorilor de găzduire oferă clienților acces SSH la directorul lor principal contra cost. Acest lucru poate fi convenabil atât pentru lucrul în linia de comandă, cât și pentru lansarea de la distanță a programelor (inclusiv aplicații grafice).
SSH este un protocol de nivel de aplicație. Serverul SSH ascultă de obicei conexiunile pe portul TCP 22. Specificația protocolului SSH-2 este în RFC 4251 . Pentru autentificarea pe server, SSH folosește un protocol de autentificare a părții bazat pe algoritmi de semnătură digitală RSA sau DSA , dar este permisă și autentificarea cu parolă (modul compatibil cu Telnet ) și chiar adresa IP a gazdei (modul compatibil cu rlogin ).
Algoritmul Diffie-Hellman (DH) este utilizat pentru a crea un secret partajat (cheie de sesiune ). Datele transmise sunt criptate folosind algoritmi de criptare simetrică , AES , Blowfish sau 3DES . Integritatea transferului de date este verificată folosind CRC32 în SSH1 sau HMAC - SHA1 / HMAC - MD5 în SSH2.
Pentru a comprima datele criptate, poate fi utilizat algoritmul LempelZiv ( LZ77 ) , care oferă același nivel de compresie ca și arhivatorul ZIP . Comprimarea SSH este activată numai la cererea clientului și este rar folosită în practică.
Versiunea 1.x
În 1995, Tatu Ylönen , cercetător la Universitatea de Tehnologie din Helsinki, Finlanda, a dezvoltat prima versiune a protocolului (acum numită SSH-1), declanșată de un atac de exploatare a parolelor asupra rețelei sale universitare. Scopul SSH a fost să înlocuiască protocoalele anterioare rlogin, TELNET, FTP [16] și rsh, care nu asigurau autentificare și confidențialitate puternice. Ylönen și-a lansat implementarea ca software gratuit în iulie 1995, iar instrumentul a câștigat rapid popularitate. Până la sfârșitul anului 1995, baza de utilizatori SSH a crescut la 20.000 de utilizatori în cincizeci de țări.
În decembrie 1995, Ylönen a fondat SSH Communications Security pentru a promova și dezvolta SSH. Versiunea originală a software-ului SSH a folosit diverse piese de software liber, cum ar fi GNU libgmp, dar versiunile ulterioare lansate de SSH Communications Security au evoluat în software-ul din ce în ce mai proprietar.
S-a estimat că până în 2000 numărul de utilizatori a crescut la 2 milioane.
Versiunea 2.x
„Secsh” a fost numele oficial al Internet Engineering Task Force (IETF) pentru grupul de lucru IETF responsabil pentru versiunea 2 a protocolului SSH. În 2006, o versiune actualizată a protocolului SSH-2 a fost adoptată ca standard. Această versiune este incompatibilă cu SSH-1. SSH-2 oferă atât securitate, cât și funcții îmbunătățite față de SSH-1. De exemplu, o securitate mai bună este obținută prin schimbul de chei Diffie-Hellman și prin verificarea puternică a integrității cu coduri de autentificare a mesajelor. Noile caracteristici SSH-2 includ posibilitatea de a lansa orice număr de sesiuni shell printr-o singură conexiune SSH. Datorită superiorității și popularității SSH-2 față de SSH-1, unele implementări precum libssh (v0.8.0+), Lsh și Dropbear acceptă doar protocolul SSH-2.
Versiunea 1.99
În ianuarie 2006, după ce versiunea 2.1 a fost creată, RFC 4253 a specificat că un server SSH care acceptă atât 2.0, cât și versiunile anterioare de SSH ar trebui să identifice versiunea sa prototip ca 1.99. Aceasta nu este o versiune actualizată, ci o metodă pentru a determina compatibilitatea cu versiunea anterioară.
OpenSSH și OSSH
În 1999, dezvoltatorii, dorind o versiune gratuită a software-ului, au revenit la vechea versiune 1.2.12 a programului SSH original, care a fost lansat ultima dată sub o licență open source. OSSH-ul lui Bjorn Grönwall a fost dezvoltat ulterior din această bază de cod. La scurt timp după aceea, dezvoltatorii OpenBSD au împărțit codul Groenlanda și au lucrat mult la el, creând OpenSSH , care a fost livrat cu versiunea 2.6 a OpenBSD. Începând cu această versiune, s-a format o ramură de „portabilitate” pentru a porta OpenSSH pe alte sisteme de operare.
Începând cu 2005, OpenSSH a fost cea mai populară implementare a SSH, inclusă implicit pe un număr mare de sisteme de operare. OSSH este depreciat între timp. OpenSSH continuă să fie acceptat și acceptă protocolul SSH-2, renunțând suportul pentru SSH-1 din baza de cod odată cu lansarea OpenSSH 7.6 .
Prima versiune a protocolului, SSH-1, a fost dezvoltată în 1995 de către cercetătorul Tatu Ulönen de la Universitatea de Tehnologie din Helsinki ( Finlanda ). SSH-1 a fost scris pentru a fi mai privat decât protocoalele rlogin, telnet și rsh. În 1996, a fost dezvoltată o versiune mai sigură a protocolului, SSH-2, care este incompatibilă cu SSH-1. Protocolul a câștigat și mai multă popularitate, iar până în 2000 avea aproximativ două milioane de utilizatori. În prezent, termenul „SSH” se referă de obicei la SSH-2, deoarece prima versiune a protocolului, din cauza unor deficiențe semnificative, acum practic nu este utilizată.
În 2006, protocolul a fost aprobat de grupul de lucru IETF ca standard de internet.
Două implementări ale SSH sunt comune: una comercială privată și una gratuită. Implementarea gratuită se numește OpenSSH. Până în 2006, 80% dintre computerele de pe Internet foloseau OpenSSH. O implementare privată este dezvoltată de SSH Communications Security, o subsidiară deținută în totalitate a Tectia [3] și este gratuită pentru uz necomercial. Aceste implementări conțin aproape același set de instrucțiuni.
Protocolul SSH-1, spre deosebire de protocolul telnet , este rezistent la atacurile de sniffing de trafic („ sniffing ”), dar nu este rezistent la atacurile man-in-the-middle . Protocolul SSH-2 este, de asemenea, rezistent la atacuri prin alăturarea la mijloc ( deturnarea sesiunii în engleză ), deoarece este imposibil să vă alăturați unei sesiuni deja stabilite sau să o interceptați.
Pentru a preveni atacurile „man-in-the-middle ” , atunci când vă conectați la o gazdă a cărei cheie nu este încă cunoscută de client, software -ul client îi arată utilizatorului o amprentă a cheii . Se recomandă să comparați cu atenție „key cast” afișat de software-ul client cu key cast, de preferință obținut prin canale de comunicare fiabile sau personal.
Suportul SSH este disponibil pe toate sistemele de tip UNIX și majoritatea dintre ele au un client și un server ssh ca utilitare standard. Există multe implementări ale clienților SSH și pentru sistemele de operare non-UNIX. Protocolul a câștigat o mare popularitate după dezvoltarea pe scară largă a analizoarelor de trafic și a metodelor de perturbare a funcționării rețelelor locale, ca alternativă la protocolul nesigur Telnet pentru gestionarea nodurilor importante.
SSH necesită un server SSH și un client SSH. Serverul ascultă conexiunile de la mașinile client și, atunci când se stabilește o conexiune, efectuează autentificarea , după care începe să servească clientul. Clientul este folosit pentru a se conecta la o mașină de la distanță și pentru a executa comenzi.
Pentru a se conecta, serverul și clientul trebuie să creeze perechi de chei — publice și private — și să schimbe chei publice. De obicei, se folosește și o parolă.
Comanda de conectare la un server SSH local din linia de comandă GNU/Linux sau FreeBSD pentru utilizatorul pacify (serverul ascultă pe portul non-standard 30000):
$ ssh -p 30000 [email protected]Generarea perechilor de chei (în sistemul de operare asemănător UNIX) este efectuată de comandă
$ ssh-keygenGenerarea unei perechi de chei SSH-2 RSA cu o lungime de 4096 de biți de către puttygen sub sistemul de operare UNIX:
$ puttygen -t rsa -b 4096 -o eșantionUnii clienți, cum ar fi PuTTY, au și o interfață grafică pentru utilizator .
Pentru a utiliza SSH în Python , există module precum python-paramiko și python-twisted-conch.
Un tunel SSH este un tunel creat printr-o conexiune SSH și folosit pentru a cripta datele tunelizate. Folosit pentru a securiza transmisia de date pe Internet ( IPsec are un scop similar ). Când este transmis printr-un tunel SSH, traficul necriptat al oricărui protocol este criptat la un capăt al conexiunii SSH și decriptat la celălalt.
Implementarea practică se poate face în mai multe moduri:
În acest caz, clientul Jabber este configurat să se conecteze la portul 4430 al serverului localhost (dacă clientul ssh rulează pe aceeași mașină cu clientul Jabber).
Pentru a crea un tunel ssh, aveți nevoie de o mașină cu un server ssh care rulează și acces la jabber.example.com. Această configurație poate fi utilizată dacă accesul la jabber.example.com de pe computerul local este blocat de un firewall, dar există acces la un server ssh care nu are restricții de acces la Internet.
TCP /IP pe straturi ale modelului OSI | Protocoale de bază|
---|---|
Fizic | |
canalizat | |
reţea | |
Transport | |
sesiune | |
Reprezentare | |
Aplicat | |
Altele aplicate | |
Lista de porturi TCP și UDP |
URI | scheme|
---|---|
Oficial | |
neoficial |