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

Opțiuni de configurare pe parte de client

În următoarea secțiune a acestui articol, ne vom concentra atenția asupra unor ajustări pe care le puteți face conexiunii pe partea de client.

Definirea informațiilor de conectare pentru anumite servere

Pe calculatorul dvs. local, puteți defini configurații individuale pentru câteva sau chiar pentru toate serverele la care vă conectați. Acestea pot fi stocate în fișierul ~/.ssh/config, care poate fi citit de către aplicația SSH client de fiecare dată când este apelată.

Creați sau deschideți acest fișier în editorul text de pe calculatorul dvs. local:

$ nano ~/.ssh/config

În acest fișier, puteți defini opțiuni de configurare individuale prin specificarea cuvântului (etichetei) Host în dreptul fiecărei gazde, urmate apoi de un alias. Mai jos, după specificarea acestora, puteți defini câte directive doriți, bineînțeles care se și găsesc în manualul de configurare pentru ssh_config:

$ man ssh_config

Un exemplu de configurare ar putea fi:

Conținut fișier:

Host testhost
    HostName exemplu.ro
    Port 4444
    User demo

Apoi veți putea să vă conectați la exemplu.ro pe portul 4444 folosind numele de utilizator “demo” pur și simplu tastând:

$ ssh testhost

Puteți deasemenea folosi wild carduri pentru a fi valabile pentru mai mult de o gazdă. Aveți în vedere că potrivirile ulterioare suprascriu pe cele anterioare. Din această cauză, ar trebui să puneți potrivirile generale la începutul fișierului. De exemplu, ați putea configura ca setare implicită, ca toate conexiunile să nu permită redirecționarea mediului grafic X, cu o excepție pentru exemplu.ro prin adăugarea acestor instrucțiuni în fișierul dvs.:

Conținut fișier:

Host *
    ForwardX11 no

Host testhost
    HostName exemplu.ro
    ForwardX11 yes
    Port 4444
    User demo

Salvați și închideți fișierul când ați terminat.

Menținerea conexiunilor active pentru a evita deconectarea

Dacă realizați ca ați fost deconectat de la sesiunea SSH înainte de a termina, este posibil ca conexiunea dvs. să se fi oprit din cauza inactivității.

Pentru evitarea acestei situații puteți configura aplicația client SSH să trimită câte un pachet TCP către server la intervale regulate.

Pe calculatorul dvs. local, puteți configura această regulă pentru fiecare conexiune prin editarea fișierului ~/.ssh/config. Deschideți-l și modificați:

$ nano ~/.ssh/config

Dacă nu există o astfel de regulă deja creată, la începutul acestui fișier, definiți o secțiune care să specifice (cuprindă) toate gazdele. Configurați ServerAliveInterval la “120” pentru a trimite un pachet TCP către server la fiecare 2 minute. Această valoare ar trebui sa fie suficientă pentru a notifica serverul să nu închidă conexiunea:

Conținut fișier:

Host *
    ServerAliveInterval 120

Salvați și închideți fișierul când ați terminat.

Dezactivarea verificării gazdelor

Implicit, de ori câte ori vă conectați la un server nou, vi se va afișa amprenta digitală a demonului SSH 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

Aceasta este configurată în așa fel încât să poată verifica autenticitatea gazdei la care încercați să vă conectați și să descopere cazurile în care un utilizator rău intenționat încearcă să se mascheze ca și serverul de la distanță autentic.

În anumite cazuri, puteți dori să dezactivați această opțiune. Atenție: Aceasta poate fi un risc de securitate enorm, așa că asigurați-vă că știți ce faceți dacă vă configurați sistemul în acest fel.

Pentru a face schimbările, deschideți fișierul ~/.ssh/config pe calculatorul dvs. local:

$ nano ~/.ssh/config

Dacă nu există o astfel de regulă deja creată, la începutul acestui fișier, definiți o secțiune care să specifice (cuprindă) toate gazdele. Configurați directiva StrictHostKeyChecking directla “no” pentru a adăuga noi gazde automat în fișierul known_hosts. Configurați UserKnownHostsFile la /dev/null pentru a nu avertiza despre gazde noi sau care au suferit schimbari:

Conținut fișier:

Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Puteți activa verificarea după caz pentru fiecare gazdă prin înlocuirea acestor opțiuni pentru alte gazde. Setarea implicită pentru StrictHostKeyChecking este “ask”:

Conținut fișier:

Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Host testhost
    HostName exemplu.ro
    StrictHostKeyChecking ask
    UserKnownHostsFile /home/demo/.ssh/known_hosts

Multiplexarea SSH într-o singură conexiune TCP

Sunt situații când stabilirea unei conexiuni TCP poate dura mai mult decât ar trebui. Dacă faceți mai multe conexiuni la aceeași mașină, puteți să profitați de avantajul multiplexării.

Multiplexarea SSH refolosește aceeași conexiune TCP pentru mai multe sesiuni SSH. Asta înlătură o parte din acțiunile necesare stabilirii unei noi sesiuni, probabil mărind și viteza. Uneori, din diferite motive, poate fi utilă și limitarea numărului de conexiuni.

Pentru a configura multiplexarea, puteți seta manual conexiunile sau puteți configura clientul ca să utilizeze automat multiplexarea când aceasta este disponibilă. Voi demonstra a doua opțiune aici.

Pentru configurarea multiplexării, editați fișierul de configurare al clientului SSH de pe calculatorul local:

$ nano ~/.ssh/config

Daca nu aveți deja o definiție de gazdă cu wildcard * la începutul fișierului, adăugați una acum (ca Host *). Vom seta We will valorile ControlMasterControlPath, și ControlPersist pentru a stabili configurarea personală de multiplexarea.

ControlMaster ar trebui sa fie setat pe “auto” pentru a putea fi capabil sa permită multiplexarea dacă aceasta este disponibilă. ControlPath va stabili calea către socket-ul de control. Prima sesiune va crea un socket iar următoarele vor fi capabile să îl găsească deoarece este etichetat cu utilizator, gazdă și port.

Setarea opțiunii ControlPersist la “1” va permite conexiunii inițiale principale sa fie dusă în fundal. Valoarea “1” specifică despre conexiunea TCP faptul că ar trebui să se termine automat la o secundă după ce ultima sesiune SSH este închisă:

Conținut fișier:

Host *
    ControlMaster auto
    ControlPath ~/.ssh/multiplex/%r@%h:%p
    ControlPersist 1

Salvați și închideți fișierul când ați terminat. Acum, vom avea nevoie să creăm directorul specificat în calea de control:

$ mkdir ~/.ssh/multiplex

Acum, toate sesiunile care vor fi stabilite cu același calculator vot încerca să folosească conexiunea TCP și socket-ul existent. Când ultima sesiune va fi încheiată, conexiunea va fi oprită la interval de o secundă.

Dacă pentru un motiv sau altul trebuie să anulați temporar configurația de multiplexarea, puteți face asta cu ajutorul opțiunii -S cu “none”:

$ ssh -S none utilizator@gazda_la_distanță

Setarea tunelurilor SSH

Direcționarea printr-un “tunel” SSH securizat a traficului din afara protocolului SSH este o modalitate excelentă de a ocoli și “păcăli” până și cele mai restrictive setări de firewall-uri. Este, de asemenea, o modalitate formidabilă și rapidă de a cripta trafic de rețea care în mod normal ar circula în clar.

Configurarea unui tunel local către un server

Conexiunile SSH pot fi folosite pentru a direcționat traficul de la porturile calculatorului local către serverul de la distanță.

O conexiune locală este o modalitate de accesa o locație din rețea de la un calculator local cu ajutorul gazdei de la distanță. Prima dată, este stabilită o conexiune SSH către gazda de la distanță. Pe serverul de la distanță, se realizează o conexiune către o adresă de rețea externă (sau internă) furnizată de utilizator iar traficul către această locație este redirecționat către calculatorul dvs. local pe un port specificat.

Aceast tip de conexiune este deseori folosit pentru a direcționa trafic către o rețea mult mai puțin restrictivă prin ocolirea regulilor firewall-ului. Altă utilizare, destul de obișnuită, este cea de a accesa de la distanță interfețele web care sunt configurate numai cu acces local (localhost).

Pentru a stabili un “tunel” local către serverul de la distanță va trebui să folosiți parametrul -L în momentul în care vă conectați și va trebui să mai furnizați încă trei parametri suplimentari:

  • Portul local unde vreți sa accesați conexiunea redirecționată.
  • Gazda la care doriți sa se conecteze serverul dvs. de la distanță.
  • Portul la care doriți sa se conecteze gazda de la distanță.

Acestea sunt introduse, în ordinea de mai sus (separate prin două puncte), ca și argumente ale opțiunii -L. Deasemnea vom folosi opțiunea-f, care face ca SSH-ul să fie dus în fundal înainte de a execuție și opțiunea-N, care nu deschide un terminal sau execută un program pe partea serverului de la distanță.

De exemplu, pentru a ne conecta la exemplu.ro pe portul 80 al gazdei dumneavoastră de la distanță, făcând conexiunea disponibilă pe calculatorul dvs. local pe potul 8888, ați putea tasta:

$ ssh -f -N -L 8888:exemplu.ro:80 utilizator@gazda_la_distanță

Acum, dacă vizitați cu ajutorul browserului dvs. web local adresa 127.0.0.1:8888, ar trebui să vedeți orice conținut este afișat pe pagina  exemplu.ro pe portul 80.

O abordare generalistă din punct de vedere al sintaxei ar fi:

$ ssh -L your_port:site_or_IP_to_access:site_port utilizator@gazda_la_distanță

Din moment ce conexiunea este în fundal, va trebui să-i identificați PID-ul pentru a îl opri (kill). Puteți face asta prin căutarea portului pe care l-ați redirecționat:

$ ps -aux | grep 8888
Mesaj afișat:

1001      5965  0.0  0.0  48168  1136 ?        Ss   12:28   0:00 ssh -f -N -L 8888:exemplu.ro:80 utilizator@gazda_la_distanță
1001      6113  0.0  0.0  13648   952 pts/2    S+   12:37   0:00 grep --colour=auto 8888

Puteți apoi opri procesul prin folosirea PID-ului, care este numărul din a doua coloană a liniei care se potrivește comenzii dvs. SSH:

$ kill -9 5965

O altă opțiune ar fi să porniți conexiunea fără opțiunea  -f flag. Astfel, conexiunea va fi menținută în execuție și nu în fundal, ceea ce vă va împiedica să folosiți fereastra terminalului pe durata redirecționării. Beneficiul acesteia este că puteți opri cu ușurință conexiunea prin tastarea “CTRL-C”.

Configurarea redirecționării SSH dinamice către un server la distanță

Conexiunile SSH pot fi folosite pentru a direcționa traficul de la porturile locale la porturile gazdei de la distanță.

Un tunel dinamic este similar unui tunel local prin faptul că permite calculatorului local să se conecteze la alte resurse prin intermediul unei gazde de la distanță. Un tunel dinamic face asta doar prin specificarea unui singur port. Aplicațiile care folosesc acest port pentru redirecționarea traficului trebuie să fie capabile să comunice folosind protocolul SOCKS astfel încât pachetele să poată fi corect redirecționate de partea cealaltă a tunelului.

Traficul care este redirecționat către portul local va fi transmis către gazda de la distanță. De acolo, protocolul SOCKS va stabili conexiunea către locația de final dorită. Această configurare permite aplicațiilor capabile sa folosească protocolul SOCKS să se conecteze în oricâte direcții (locații) prin intermediul serverului de la distanță, fără nevoia de a deschide mai multe tunele SSH statice.

Pentru stabilirea unei conexiuni, vom folosi opțiunea -D împreună cu portul local prin care vrem să accesăm “tunelul SSH”. Deasemenea putem folosi opțiunea -f, care duce procesul SSH în fundal, înainte de a executa și opțiunea -N, care face să nu se execute un program sau să se deschidă un termina (shell) în serverul de la distanță.

De exemplu, pentru a stabili o conexiune pe portul “7777”, puteți tasta:

$ ssh -f -N -D 7777 utilizator@gazda_la_distanță

De aici, puteți să începeți să direcționați aplicațiile care sunt compatibile SOCKS (de exemplu un browser web), către portul pe care l-ați selectat. Aplicația va trimite informațiile într-un socket asociat portului.

Metoda direcționării traficului către portul SOCKS va fi diferită în funcție de aplicație. De exemplu, în Firefox, locația acestor setări este în Preferences > Advanced > Settings > Manual proxy configurations. În Chrome, puteți porni aplicația cu opțiunea  --proxy-server= flag set. Cu siguranță veți folosi interfața localhost și portul pe care l-ați definit pentru redirecționarea traficului. De asemenea pentru o anonimizare optima puteți evita scurgerile de interogări DNS (DNS Leak), care vă pot dezvălui identitatea prin faptul ca rezolvările DNS se vor realiza la nivelul providerului de internet local în loc să se realizeze la nivelul serverului de la distanță.

Pentru asta, în Firefox, în bara de adrese tastați about:config. Apoi apăsați butonul pe care scrie “I’ll be careful, I promise!“. Pentru a ușura căutarea tastați network.proxy.socks. Dublu click pe setarea network.proxy.socks_remote_dns pentru a o activa, la valoarea true. Închideți și din acest moment toate interogările DNS se vor face pe server.

Din moment ce conexiunea rulează în fundal, va trebui să-i găsiți PID-ul și s-o opriți. Puteți face asta prin executarea unei căutări după portul prin care ați redirecționat traficul:

$ ps -aux | grep 7777
Mesaj afișat:

1001      5965  0.0  0.0  48168  1136 ?        Ss   12:28   0:00 ssh -f -N -D 7777 username@remote_host
1001      6113  0.0  0.0  13648   952 pts/2    S+   12:37   0:00 grep --colour=auto 7777

Puteți apoi opri procesul prin folosirea PID-ului, care este numărul din a doua coloană a liniei care se potrivește comenzii dvs. SSH:

$ kill -9 5965

O altă opțiune ar fi să porniți conexiunea fără opțiunea  -f flag. Astfel, conexiunea va fi menținută în execuție și nu în fundal, ceea ce vă va împiedica să folosiți fereastra terminalului pe durata redirecționării. Beneficiul acesteia este că puteți opri cu ușurință conexiunea prin tastarea “CTRL-C”.

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.

Faci un comentariu sau dai un răspuns?

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

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