Ghid esențial SSH: servere, clienți și chei criptografice

Introducere

SSH este un protocol securizat folosit ca mijloc principal de conectare la serverele Linux de la distanță. Acesta furnizează o interfața text prin activarea unui shell/console la distanță. După conectare, toate comenzile tastate în terminalul local sunt trimise serverului aflat la distanță și executate acolo.

În cadrul acestui ghid, care nu are pretenția de a fi unul exhaustiv, ci doar tratează problemele esențiale, cum ar fi metodele obișnuite de conectare prin SSH pentru a vă atinge obiectivele. Acesta poate fi folosit și ca o referință rapidă, când aveți nevoie să știți cum să va conectați și să configurați un server în mai multe feluri.

Cum să folosiți acest ghid

  • Citiți mai întâi secțiunea prezentare generală SSH dacă nu sunteți familiarizat cu SSH în general, sau dacă, abia începeți să lucrați cu acest protocol.
  • Folosiți oricare dintre secțiunile de mai jos pentru ceea ce încercați să întreprindeți. Mai multe dintre secțiuni nu au legătură între ele, așa că puteți folosi exemplele de mai jos independent.
  • Folosiți funcția de căutare a browserului dvs. pentru a localiza secțiunile de care aveți nevoie din acest ghid.
  • Copiați și lipiți exemplele date în linie de comandă, înlocuind valorile care trebuie schimbate cu valorile personalizate.

Prezentare generală SSH

Cea mai obișnuită metodă de conectare la un server Linux aflat la distanță este cu ajutorul protocolului SSH. SSH înseamnă, de fapt, Shell securizat și oferă o modalitate securizată de a executa comenzi, de a face schimbări și de a configura servicii de la distanță. În momentul în care vă conectați prin SSH, vă conectați folosind un cont care deja există pe serverul de la distanță.

Cum funcționează protocolul SSH?

În momentul în care vă conectați prin SSH, practic veți deschide o sesiune de terminal (shell), care este, de fapt, o interfață text, de unde puteți interacționa cu serverul dvs. Pe întreaga durată a sesiunii SSH orice comanda pe care o veți tasta în terminalul local este trimisă printr-un tunel SSH criptat și executată pe acel server.

conectare ssh protocol ssh schema
Schema de principiu a protocolului SSH

Conexiunea SSH este implementată folosind modelul client-server. Asta înseamnă că în momentul în care o sesiune SSH este stabilită, serverul de la distanță va executa o aplicație denumită demon (serviciu) SSH. Serviciul în Linux este practic, o aplicație care rulează în fundalul sistemului de operare independent de ce utilizator este conectat. Aplicația deschide conexiuni prin porturi specifice de rețea, autentifică cererile conexiunii, și generează mediul de lucru dacă utilizatorul introduce corect datele de conectare.

Calculatorul utilizatorului trebuie să aibă instalată o aplicație SSH client. Aceasta este un program care știe cum să comunice folosind protocolul SSH și căreia i se dau informații despre serverul de la distanță, în principal numele gazdei sau IP, utilizatorul și parola sau cheia SSH ale acestuia care trebuie introduse pentru autentificare. Aplicația client mai poate specifica anumite detalii despre tipul de conexiune pe care dorește să o realizeze.

Cum autentifică protocolul SSH utilizatorii

Clienții se autentifică în general fie folosind o parolă (mai puțin sigur și nerecomandat) fie cu ajutorul cheilor SSH, care sunt foarte sigure.

Autentificările cu parolă sunt criptate și sunt ușor de înțeles pentru noii utilizatori. Totuși, programe automate (boți) precum și utilizatori răuvoitori, de cele mai multe ori, vor incerca, in mod repetat, să se autentifice la conturi care permit conectarea cu ajutorul parolelor, și care duce în final la grave incidente de securitate. Din acest motiv, recomand întotdeauna configurarea autentificării bazate pe chei SSH în toate scenariile posibile.

Cheile SSH sunt un set de chei criptografice pereche care pot fi folosite pentru autentificare. Fiecare set conține o cheie publică și una privată. Cheia publică poate fi distribuită liber, fără restricții, în timp ce cheia privată trebuie sa fie păzită cu atenție și niciodată expusă vreunei terțe persoane.

Pentru autentificarea cu ajutorul cheilor SSH, un utilizator trebuie să aibe o cheie privată din această pereche pe calculatorul local. Pe serverul de la distanță, cheia publică trebuie sa fie copiată într-un fișier în folderul home al utilizatorului, în directorul ~/.ssh/authorized_keys. Acest fișier conține o listă cu cheile publice, câte una pe rând, care sunt autorizate să se conecteze la acel cont.

După primirea acestui mesaj, clientul îl va de cripta folosind cheia privată și va combina șirul aleator care este afișat împreună cu ID-ul sesiunii negociate anterior. Apoi va genera un șir amestecat (hash) cu exact aceeași valoare și îl va transmite către server. Serverul deja a avut mesajul original și ID-ul sesiunii, așa că vă putea compara acest hash MD5 generat de aceste valori și va stabili dacă clientul deține cheia privată.

Acum că știți cum funcționează SSH, putem începe să discutăm câteva exemple pentru a demonstra câteva metode de lucru cu protocolul SSH.

Generarea și lucrul cu cheile SSH

În această secțiune vom vorbi despre cum să generați chei SSH pe un calculator client și apoi să distribuiți cheia publică către serverele pe care le folosiți. Este o secțiune foarte bună cu care să începeți dacă nu ați mai generat deloc chei criptografice, o necesitate din ce în ce mai crescută a zilelor noastre datorită multitudinii de amenințări cibernetice.

Generarea unei perechi de chei SSH

Generarea unei noi chei publice și private SSH pe calculatorul dvs. local reprezintă primul pas către autentificarea la un server de la distanță fără parolă. Totdeauna ar trebui să folosiți autentificarea cu chei SSH, cu excepția cazurilor când aveți un motiv întemeiat să n-o faceți.

Un număr de algoritmi criptografici pot fi folosiți pentru a genera cheile SSH, inclusiv RSA, DSA, și ECDSA. Cheile RSA sunt în general preferate și sunt tipul generat implicit.

Pentru a genera o pereche de chei RSA pe calculatorul dvs. local, tastați:

$ ssh-keygen
Mesaj afișat:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa):

Acest promt vă permite să alegeți locația în care vă veți stoca cheia privată RSA. Apăsați ENTER pentru a lăsa valorile implicite, ceea ce va duce la stocarea acesteia în directorul ascuns .ssh din directorul home al utilizatorului dvs. Lăsând locația implicită selectată va permite clientului SSH folosit de dvs. să găsească aceste chei automat.

Mesaj afișat:

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Următorul mesaj vă permite să introduceți o parolă, de o mărime variabilă, pentru a securiza și mai mult cheia dvs. privată. Implicit, va trebui să introduceți parola pe care ați configurat-o de fiecare dată când folosiți cheia privată, ca și măsură de securitate suplimentară. Dacă doriți puteți apăsa ENTER pentru a nu configura o parolă. Totuși, aveți în vedere că acest fapt va permite oricărei persoane care are acces la cheia dvs. privată să se conecteze la serverele personale.

Dacă alegeți să introduceți o parolă, nici un caracter nu va fi afișat pe ecran în momentul în care tastați. Este o măsură de securitate suplimentară.

Mesaj afișat:

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
8c:e9:7c:fa:bf:c4:e5:9c:c9:b8:60:1f:fe:1c:d3:8a root@here
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|       +         |
|      o S   .    |
|     o   . * +   |
|      o + = O .  |
|       + = = +   |
|      ....Eo+    |
+-----------------+

Această procedură a generat, în final, o pereche de chei SSH RSA, localizate în subdirectorul ascuns .ssh din directorul home al utilizatorului dvs. Aceste fișiere sunt:

  • ~/.ssh/id_rsa: Cheia privată. NU DISTRIBUIȚI ACEST FIȘIER!
  • ~/.ssh/id_rsa.pub: Cheia publică asociată. Aceasta poate fi distribuită liber fără nici o consecință.

Generarea unei perechi de chei SSH cu un număr mai mare de Biți

Cheile SSH sunt create implicit cu mărimea de 2048 de biți. De regulă, această mărime este considerată în regulă, din punct de vedere al securității, dar puteți alege un număr mai mare de biți pentru a avea o cheie criptată și mai puternic.

Pentru a crea o astfel de cheie, includeți argumentul -b după care numărul de biți pe care îi doriți să îi dețină cheia. Majoritatea serverelor suportă chei cu o lungime de până la 4096 biți. Cheile mai lungi s-ar putea să nu fie acceptate din rațiuni de protecție împotriva atacurilor DDoS:

$ ssh-keygen -b 4096

Dacă ați creat anterior o cheie diferită, veți fi întrebat dacă doriți să o suprascrieți:

Mesaj afișat:

Overwrite (y/n)?

Dacă alegeți „yes”, cheia dvs. anterioară va fi suprascrisă și nu veți mai fi capabili sa vă conectați la acel server folosind acea cheie. Din această cauză, fiți precauți în acțiunea de suprascriere.

Ștergerea sau schimbarea parolei pentru cheia privată

Dacă ați generat o parolă pentru cheia privată și doriți să o schimbați sau să o ștergeți, o puteți face foarte ușor.

Atenție: Pentru a schimba o parolă sa pentru a o șterge, trebuie să cunoașteți pe cea originală. Daca ați pierdut parola cheii, nu mai aveți nici o soluție de recuperare, și va trebui să generați o nouă pereche de chei.

Pentru a schimba sa șterge o parolă, pur și simplu tastați:

$ ssh-keygen -p
Mesaj afișat:

Enter file in which the key is (/root/.ssh/id_rsa):

Puteți tasta locația cheii pe care doriți să o modificați sau să apăsați ENTER pentru a accepta valoarea implicită:

Mesaj afișat:

Enter old passphrase:

Introduceți vechea parolă pe care doriți să o schimbați. Apoi veți fi întrebați sa introduceți noua parolă:

Mesaj afișat:

Enter new passphrase (empty for no passphrase): 
Enter same passphrase again:

Aici puteți introduce noua parolă sau să apăsați ENTER pentru a înlătură orice parolă.

Afișarea amprentei electronice a cheii SSH

Fiecare pereche de chei SSH au o „amprentă” criptografică unică care poate fi folosită pentru a identifica în mod unic cheile. Aceasta poate fi utilă în anumite situații.

Pentru a afla amprenta unei chei SSH, tastați:

$ ssh-keygen -l
Mesaj afișat:

Enter file in which the key is (/root/.ssh/id_rsa):

Puteți apăsa ENTER dacă aceea este locația corecta a cheii, altfel introduceți calea corectă. Veți vedea, mai apoi, afișat un șir care conține mărimea în biți a cheii, amprenta criptografică, contul și gazda pentru care a fost creată precum și algoritmul folosit la crearea acesteia:

Mesaj afișat:

4096 8e:c4:82:47:87:c2:26:4b:68:ff:96:1a:39:62:9e:4e  demo@test (RSA)

Copierea cheii publice SSH într-un server cu ajutorul SSH-Copy-ID

Pentru a copia cheia dvs. publică într-un server, ceea ce vă va permite să vă autentificați fără parolă, mai multe metode pot fi abordate.

Dacă deja aveți configurat acces SSH cu autentificare bazată pe parolă la serverul dvs. și dacă aveți și utilitarul ssh-copy-id instalat, procesul este destul de simplu. Acest utilitar denumit ssh-copy-id este deja inclus în multe distribuții Linux în pachetele OpenSSH, așa că este foarte posibil să îl aveți deja instalat pe sistemul dvs.

Dacă aveți această opțiune, puteți transfera rapid cheia dvs. publică tastând:

$ ssh-copy-id utilizator@gazda_la_distanță

Această comandă vă va cere apoi parola utilizatorului sistemului de la distanță:

Mesaj afișat:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
demo@111.111.11.111's password:

După tastarea parolei, conținutul cheii dvs. ~/.ssh/id_rsa.pub va fi atașat la sfârșitul fișierului ~/.ssh/authorized_keys din contul utilizatorului:

Mesaj afișat:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'demo@111.111.11.111'"
and check to make sure that only the key(s) you wanted were added

Acum vă puteți autentifică la acel cont de utilizator fără a folosi nici o parolă:

$ ssh utilizator@gazda_la_distanță

Copierea cheii publice SSH într-un server fără SSH-Copy-ID

Dacă nu aveți instalat utilitarul ssh-copy-id, dar totuși aveți acces SSH bazat pe autentificare cu parolă la serverul de la distanță, puteți copia conținutul cheii dvs. publice dar într-un alt mod.

Puteți afișa conținutul cheii și apoi îl redirecționați către comanda ssh. Pe partea aflată la distanță, vă puteți asigura că directorul ~/.sshexistă, și apoi să adăugați conținutul redirecționat în fișierul ~/.ssh/authorized_keys:

$ cat ~/.ssh/id_rsa.pub | ssh utilizator@gazda_la_distanță "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Veți fi rugat să introduceți parola pentru contul de la distanță:

Mesaj afișat:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
demo@111.111.11.111's password:

După introducerea parolei, cheia dvs. va fi copiată, permițându-vă să vă conectați fără parolă:

$ ssh utilizator@gazda_la_distanță

Copierea manuală a cheii publice SSH într-un server

Dacă nu aveți acces SSH cu autentificare bazată pe parolă, va trebui să adăugați cheia publică manual în serverul de la distanță.

Pe calculatorul dvs. local, puteți găsi conținutul cheii dvs. publice tastând următoarea comandă:

$ cat ~/.ssh/id_rsa.pub
Mesaj afișat:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

Puteți copia acest text, și manual, să îl lipiți în fișierul potrivit localizat pe serverul de la distanță. Va trebui să vă conectați la serverul de la distanță prin intermediul altor mijloace (ca de exemplu consola web de la AWS).

Pe serverul de la distanță creați directorul ~/.sshif dacă acesta nu există deja:

$ mkdir -p ~/.ssh

După aceea, puteți crea sau lipi la fișierul ~/.ssh/authorized_keys textul copiat tastând:

$ echo text_cheie_publică >> ~/.ssh/authorized_keys

Acum ar trebui să vă puteți conecta la serverul de la distanță fără parolă.

Instrucțiuni de bază pentru conectare

Următoarea secțiune va trata câteva aspecte de bază despre cum să vă conectați la un server cu ajutorul protocolului SSH.

Conectarea la un server de la distanță

Pentru conectarea la un server de la distanță precum și deschiderea unui shell puteți folosi comanda ssh.

Cea mai simplă formă a comenzii presupune că numele de utilizator pe care îl folosiți pe calculatorul local este același cu cel al serverului la care doriți să vă conectați. Dacă acest lucru este adevărat, vă puteți conecta folosind

$ ssh gazda_la_distanță

Dacă numele de utilizator este diferit pe serverul de la distanță, veți avea nevoie să specificați și numele de utilizator de la distanță folosind o astfel de comandă:

$ ssh utilizator@gazda_la_distanță

Dacă este prima dată când vă conectați la o nouă gazdă, veți vedea afișat un mesaj care arată ceva de genul:

Mesaj afișat:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Tastați „yes” pentru a accepta autenticitatea gazdei de la distanță.

Dacă folosiți autentificarea bazată pe parolă, vi se va cere apoi paorla pentru contul de la distanță. Dacă folosiți chei SSH, vi se va cere apoi să introduceți parola pentru cheia SSH, dacă ați configurat vreuna, altfel veți fi conectați automat.

Rularea unei singure comenzi pe un server la distanță

Pentru a rula o singură comandă pe un server de la distanță, în loc să deschideți ditamai sesiunea de terminal, puteți adăuga comanda după informațiile de conectare, exact în acest mod:

$ ssh utilizator@gazda_la_distanță comanda_de_rulat

Aceasta va conecta gazda la distanță, va autentifica datele de conectare și va executa comanda pe care ați specificat-o. Conexiunea se va inchide imediat ce comanda a fost executată.

Conectarea la un server pe un port diferit

Implicit demonul SSH de pe orice server rulează pe portul 22. Clientul dvs. SSH va presupune că acesta este corect în momentul în care va încerca să se conecteze. Dacă serverul dvs. SSH ascultă pe un port non-standard (vom vorbi și despre asta un pic mai jos), va trebui să specificați noul număr al portului în momentul în care vă conectați.

Puteți face asta prin specificare numărului de port cu ajutorul opțiunii -p:

$ ssh utilizator@gazda_la_distanță -p număr_port

Pentru a evita scrierea acestei opțiuni de fiecare dată când veți avea nevoie să vă conectați la serverul de la distanță, puteți crea sau edita un fișier de configurare în directorul ~/.ssh din directorul home al calculatorului dvs. local.

Editați sau creați fișierul acum tastând următoarea comandă:

$ nano ~/.ssh/config

Aici, puteți seta opțiuni de configurare specifice gazdei. Petru a specifica noul dvs. port, folosiți formatul de mai jos:

Conținut fișier:

Host alias_gazda_la_distanță
    HostName gazda_la_distanță
    Port număr_port

Asta vă va permite să vă conectați fără să specificați numărul portului în linia de comandă.

Adăugarea cheilor SSH la un agent SSH pentru a evita tastarea parolei

Dacă aveți o parolă setată la cheile dvs. SSH, veți fi invitați să introduceți parola de fiecare dată când o folosiți pentru a vă conecta la o gazdă de la distanță.

Pentru evitarea acestei acțiuni repetitive, puteți rula un agent SSH. Acest mic utilitar stochează cheia privată după ce ați introdus parola pentru prima dată. Aceasta va fi valabilă doar pe durata sesiunii deschise în terminal, permițându-vă să vă conectați ulterior fără să mai reintroduceți parola.

Acest lucru este important, dacă veți avea nevoie să vă redirecționați datele de conectare SSH (vezi paragraful de mai jos).

Pentru a porni agentul SSH, tastați următoarea comandă în sesiunea terminalului de pe calculatorul local:

$ eval $(ssh-agent)
Mesaj afișat:

Agent pid 10891

Aceasta comandă va porni aplicați agent și o va plasa în fundal. Acum veți avea nevoie să adăugați cheia privată în memoria agentului, astfel încât să poată să v-o gestioneze corect:

$ ssh-add
Mesaj afișat:

Enter passphrase for /home/demo/.ssh/id_rsa:
Identity added: /home/demo/.ssh/id_rsa (/home/demo/.ssh/id_rsa)

Va trebui să introduceți parola (dacă ați configurat vreuna). După asta, identitatea este adăugată în baza de date a agentului, ceea ce vă va permite să folosiți chei pentru autentificare de câte ori doriți, fără a fi nevoit să reintroduceți parola din nou.

Atenție: În cazul în care comanda ssh-add nu fucționează așa simplu fără nici un atribut, atunci va trebui să adaugați manual calea către cheia privată:

$ ssh-add /calea/către/cheia/privată

Redirecționarea datelor de conectare SSH pentru a fi folosite pe un server

Dacă doriți să vă puteți conecta fără parolă de la un server la altul, va trebui să redirecționați cheia dvs SSH. Asta vă va permite să vă autentificați pe alt server prin intermediul serverului la care sunteți conectat, folosind datele de autentificare de pe computerul local.

Pentru a începe, trebuie să aveți agentul SSH pornit și cheia SSH adăugată în baza de date a acestuia (vezi paragraful anterior). După ce ați făcut asta, va trebui să vă conectați la primul server folosind opțiunea -A. Aceasta trimite datele de conectare către server în cadrul sesiunii create:

$ ssh -A utilizator@gazda_la_distanță

De aici, puteți face SSH către orice alt server care este autorizat sa folosească cheia dvs. SSH. Vă veți conecta ca și cum cheia dvs. privată ar fi stocată în acest server.

root

Un entuziast pasionat de tot ceea ce înseamnă Linux și Open Source și un energic promotor. Deschis la orice proiecte bazate pe aceste tehnologii.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.

Share via
Copy link
Powered by Social Snap