From 9e43ff096b68dbfab4ac61b8cbe8eaf449bdfbd8 Mon Sep 17 00:00:00 2001 From: Razvan Deaconescu Date: Mon, 11 Sep 2023 21:23:37 +0300 Subject: [PATCH] task-admin: Add remote section Add section detailing options to connect to remote workstation. Signed-off-by: Sergiu Weisz Co-authored-by: Razvan Deaconescu Signed-off-by: Razvan Deaconescu --- .../task-admin/gifs/reverse-ssh-tunnel.gif | Bin 0 -> 72734 bytes chapters/task-admin/remote.rst | 387 +++++++++++++++++- 2 files changed, 369 insertions(+), 18 deletions(-) create mode 100644 chapters/task-admin/gifs/reverse-ssh-tunnel.gif diff --git a/chapters/task-admin/gifs/reverse-ssh-tunnel.gif b/chapters/task-admin/gifs/reverse-ssh-tunnel.gif new file mode 100644 index 0000000000000000000000000000000000000000..716f7c47a7a653efbdf94baa2aac30d32780f670 GIT binary patch literal 72734 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 Lgi1IPfdBwIQZ^H# literal 0 HcmV?d00001 diff --git a/chapters/task-admin/remote.rst b/chapters/task-admin/remote.rst index 67ed767..d484324 100644 --- a/chapters/task-admin/remote.rst +++ b/chapters/task-admin/remote.rst @@ -1,61 +1,412 @@ +.. _task_admin_remote: + Conectarea la workstation ========================= -Prima problemă cu care ne vom confrunta este conectarea la stație, deoarece, în majoritatea cazurilor, nu vom lucra în aceeași rețea cu sistemul la distanță și stația nu va avea o adresă IP publică, astfel încât să ne putem conecta direct la sistem folosind un protocol de comunicare la distanță, cum ar fi SSH fără să facem pași extra. +.. note:: + + Pentru a parcurge această secțiune este recomandat să descărcați ultima versiune a respository-ului laboratorului. + Pentru a descărca ultima versiune a repository-ului, rulați comanda ``git pull`` în directorul ``~/uso-lab/labs/10-tasks-admin/lab-containers/``. + + Infrastructura laboratorului este bazată pe containere Docker ale căror imagini vor fi generate pe propriul calculator. + Dacă nu aveți deja instalat Docker Engine pe sistem, scriptul ``~/uso-lab/labs/10-tasks-admin/lab-containers/lab_prepare.sh`` va instala aplicația. + + După ce ați terminat de lucrat, vă recomandăm să opriți containerele rulând comanda ``./lab-prepare.sh delete`` în directorul ``~/uso-lab/labs/10-tasks-admin/lab-containers/``. + +Prima problemă cu care ne vom confrunta este conectarea la stație, deoarece, în majoritatea cazurilor, nu vom lucra în aceeași rețea cu sistemul la distanță și stația nu va avea o adresă IP publică. +Așadar, nu ne vom putea conecta direct la sistem folosind un protocol de comunicare la distanță, cum ar fi SSH fără să facem pași suplimentari. Câteva soluții de conectare la sistem pe care le vom aborda sunt: + * VPN * tunel SSH -* DDNS +* DDNS (*Dynamic Domain Name System*) + +Nu vom aborda soluția bazată pe DDNS, deoarece aceasta presupune că avem o adresă IP publică configurată pe ruterul primit de la furnizorul de Internet, dar acest lucru nu este valabil pentru majoritatea stațiilor. + +.. _task_admin_remote_ip: + +Problema adreselor IP private +----------------------------- + +.. note:: + + Pentru rularea acestui demo, rulați în directorul ``~/uso.git/labs/03-user/lab-containers/`` comanda ``./lab_prepare.sh install remote`` și comanda ``./lab_prepare.sh install local`` + Pentru a ne conecta la infrastructura pentru această secțiune, vom folosi comanda ``./lab_prepare.sh connect`` având ca parametru numele mașinii la care vrem să ne conectăm, ``local`` sau ``remote``. + +Adresele IPv4 au fost proiectate pentru a fi identificatori unici în Internet pentru stații, așa cum este prezentat în capitolul :ref:`network_connection_internet`. +Acestea pot să identifice maxim :math:`2^{32}` stații în Internet. +Însă acum există mai multe dispozitive conectate la Internet decât există adrese IPv4 care se pot asigna pe dispozitive. + +Pentru a rezolva această problemă, au fost alese anumite intervale de adrese IP care pot fi atribuite pe mai multe dispozitive în același timp. +Astfel, s-a rezolvat problema suprapunerii adreselor IP. +Dezavantajul este că aceste adrese, nemaifiind unice, nu mai pot să fie accesibile de oriunde din Internet. +Aceste adrese IP sunt **adrese IP private**; +celelalte adrese, accesibile din Internet, sunt **adrese IP publice** sau **rutabile**. + +Intervalele adreselor IPv4 private sunt următoarele: + +* ``10.0.0.0`` - ``10.255.255.255``; +* ``172.16.0.0`` - ``172.31.255.255``; +* ``192.168.0.0`` - ``192.168.255.255`` - +Nicio adresă IP din intervalele de mai sunt nu poate fi accesată direct din Internet. + +În această subsecțiune vom lucra cu 2 stații care sunt distribuite în felul următor: + +* ``local``, reprezintă stația "locală", adică laptopul de pe care ne-am conecta, dacă ar fi vorba de un scenariu real; are o singură interfață de rețea cu adresa IP ``10.10.10.3``; +* ``remote``, reprezintă workstationul la care vrem să ne conectăm; are o singură interfață cu adresa IP ``10.11.11.3``. + +Vom verifica conectivitatea cu stația ``remote`` de pe stația ``local`` folosind comanda ``ping`` (am introdus utilitarul ``ping`` în secțiunea :ref:`network_connection_internet_ping`). + +.. code-block:: + + root@local:~# ping -c 2 10.10.10.3 + PING 10.10.10.3 (10.10.10.3) 56(84) bytes of data. + + --- 10.10.10.3 ping statistics --- + 2 packets transmitted, 0 received, 100% packet loss, time 1010ms + + root@local:~# ping -c 2 141.85.241.99 + PING 141.85.241.99 (141.85.241.99) 56(84) bytes of data. + 64 bytes from 141.85.241.99: icmp_seq=1 ttl=61 time=9.02 ms + 64 bytes from 141.85.241.99: icmp_seq=2 ttl=61 time=8.58 ms + + --- 141.85.241.99 ping statistics --- + 2 packets transmitted, 2 received, 0% packet loss, time 1001ms + rtt min/avg/max/mdev = 8.588/8.806/9.024/0.218 ms + +Rezultatul primei rulări a comenzii ``ping`` arată că nu avem conectivitate între stația ``local`` și stația ``remote``. +Totuși, am testat și conectivitatea cu o altă adresă IP din Internet (în cazul acesta folosind adresa IP a stației ``fep.grid.pub.ro`` - cu adresa IP 141.85.241.99); +cu aceasta am putut să comunicăm, deci nu este o problemă de conectare la Internet. + +.. _task_admin_remote_vpn: Conectarea prin VPN ------------------- -Prima soluție pentru conectarea la o stație din exterior o reprezintă serviciile de tip VPN. -Acestea conectează două stații care în mod fizic nu sunt conectate la aceeași rețea +O primă soluție pentru conectarea la o stație care folosește o adresă IP privată o reprezintă serviciile de tip VPN (*Virtual Private Network*). +Acestea conectează două stații care în mod fizic nu sunt conectate la aceeași rețea. + +Pentru această soluție avem două moduri de conectare: folosind un server public pe care îl configurăm noi drept server de VPN, sau folosirea unui serviciu public de VPN cum ar fi `Hamachi `_ sau `ZeroTier `_. +Am folosit ca exemplu serviciile Hamachi sau ZeroTier, deoarece acestea pot fi folosite gratuit și sunt ușor de configurat, așa cum reiese din tabelul de mai jos. + +.. list-table:: Soluții VPN + :widths: 25 25 50 + :header-rows: 1 + + * - Nume soluție + - Avantaje + - Dezavantaje + * - Hamachi + - * Ușor de configurat -Pentru această soluție avem două moduri de organizare: folosind un server public pe care îl setăm noi drept server de VPN, sau folosirea unui serviciu public de VPN cum ar fi Hamachi sau ZeroTier. + * Aplicație client disponibilă pe Linux și pe Windows -Am folosit ca exemplu serviciile Hamachi sau ZeroTier, deoarece acestea pot fi -folosite fără să fie cumpărate și sunt ușor de configurat. + * Nu necesită înregistrarea + - * Latență mai mare decât alte soluții - + * Soluția gratis nu este optimă pentru un număr mare de calculatoare + * - ZeroTier + - * Ușor de instalat și cofigurat + + * Permite 50 de stații într-o rețea + + - * Necesită înregistrare pentru folosire + * - FreeLAN + - * Soluție gratis + * Nu limitează numărul de stații dintr-o rețea + - * Configurare dificilă + * Nu funcționează pe toate stațiile, este nevoie de anumite condiții + speciale + +.. _task_admin_remote_vpn_hamachi: Folosirea serviciului Hamachi ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Pentru început, recomandăm folosirea serviciului Hamachi, deoarece acesta nu presupune înregistrarea unui cont pentru folosirea aplicației, dar Hamachi vine cu dezavantajul că putem să conectăm mai puține stații între ele și viteza conexiunii este mai mică decât dacă am folosii unele servicii plătite, cum ar fi OpenVPN, sau altele. +Pentru început, recomandăm folosirea aplicației Hamachi, deoarece acesta nu presupune înregistrarea unui cont pentru a fi folosită. +Hamachi vine cu dezavantajul că putem să conectăm maxim cinci stații între ele și viteza conexiunii este mai mică decât dacă am folosi unele servicii plătite, cum ar fi OpenVPN. + +.. _task_admin_remote_vpn_hamachi_install: Instalarea Hamachi """""""""""""""""" -Vom urmări instrucțiunile de aici: -https://support.logmeininc.com/central/help/how-to-install-the-client-to-a-local-computer-central-t-hamachi-add-attached-local +Nu vom instala pachetul folosind comanda ``apt``, deoarece repository-ul de pachete folosit de Ubuntu nu conține pachetul pentru Hamachi. +Pentru instalarea aplicației Hamachi vom descărca și instala manual pachetul. + +Vom folosi comanda ``wget`` pentru a descărca pachetul: + +.. code-block:: + + root@remote:~# wget https://www.vpn.net/installers/logmein-hamachi_2.1.0.203-1_amd64.deb + --2021-01-05 15:49:15-- https://www.vpn.net/installers/logmein-hamachi_2.1.0.203-1_amd64.deb + Resolving www.vpn.net (www.vpn.net)... 64.95.128.197, 64.95.128.199 + Connecting to www.vpn.net (www.vpn.net)|64.95.128.197|:443... connected. + HTTP request sent, awaiting response... 200 OK + Length: 1613102 (1.5M) [application/vnd.debian.binary-package] + Saving to: 'logmein-hamachi_2.1.0.203-1_amd64.deb' + + logmein-hamachi_2.1.0.203-1_amd64 100%[==========================================================>] 1.54M 4.14MB/s in 0.4s + + 2021-01-05 15:49:16 (4.14 MB/s) - 'logmein-hamachi_2.1.0.203-1_amd64.deb' saved [1613102/1613102] + + root@remote:~# dpkg -i logmein-hamachi_2.1.0.203-1_amd64.deb + Selecting previously unselected package logmein-hamachi. + (Reading database ... 12216 files and directories currently installed.) + Preparing to unpack logmein-hamachi_2.1.0.203-1_amd64.deb ... + Unpacking logmein-hamachi (2.1.0.203-1) ... + Setting up logmein-hamachi (2.1.0.203-1) ... + mknod: /dev/net/tun: File exists + Starting LogMeIn Hamachi VPN tunneling engine logmein-hamachi + starting - success + Processing triggers for systemd (245.4-4ubuntu3.3) ... + +Am folosit comanda ``dpkg`` care gestionează aplicații sub forma pachetelor ``.deb``, specifice distribuțiilor Debian, Ubuntu și Mint. +Opțiunea ``-i`` specifică comenzii ``dpkg`` că vrem să instalăm o aplicație. + +Verificăm instalarea folosind comanda ``hamachi``: + +.. code-block:: + + root@remote:~# hamachi + version : 2.1.0.203 + pid : 42 + status : offline + client id : + address : + nickname : + lmi account: + +Pentru a ne autentifica la serverele Hamachi, folosim comanda ``hamachi login``: + +.. code-block:: + + root@remote:~# hamachi login + Logging in .......... ok + root@remote:~# hamachi + version : 2.1.0.203 + pid : 42 + status : logged in + client id : 253-932-022 + address : 25.114.254.180 2620:9b::1972:feb4 + nickname : remote + lmi account: - + +Această comandă generează un identificator unic per stație și stabilește un nickname. +Rulând comanda ``hamachi`` vor fi afișate identificatorul, nickname-ul sistemului și adresa IP din VPN. + +.. _task_admin_remote_vpn_hamachi_install_ex: + +Exercițiu: Instalare Hamachi +"""""""""""""""""""""""""""" + +Instalați Hamachi pe stația ``local``. + +.. _task_admin_remote_vpn_hamachi_create: Crearea unei rețele private """"""""""""""""""""""""""" +Odată ce am instalat Hamachi pe ambele stații pe care vrem să le conectăm, trebuie să creăm o rețea virtuală prin care acestea două să comunice. +Această rețea va conecta cele două stații, cu toate că ele nu sunt fizic în aceeași rețea. + +Vom crea rețeaua virtuală de pe stația ``remote``. +Pentru a crea o rețea virtuală folosim comanda ``hamachi create`` împreună cu numele rețelei și parola acesteia. +Stația ``remote`` va avea drepturi de administrare a rețelei. +Doar având drepturi administrative se pot scoate sisteme din rețea, sau se poate șterge rețeaua. +În comanda de mai jos, folosiți în loc de șirul de caractere ``nume-prenume`` numele și prenumele vostru: + .. code-block:: - root@workstation:~$ sudo hamachi create nume-prenume 12345667890 + root@remote:~# hamachi create nume-prenume 12345667890 + Creating nume-prenume .. ok + root@remote:~# hamachi list + * [nume-prenume] capacity: 1/5, subscription type: Free, owner: This computer + +Am folosit comanda ``hamachi list`` pentru a verifica faptul că a fost creată rețeaua. +Comanda ``hamachi list`` afișează toate rețelele din care face parte stația. + +.. _task_admin_remote_vpn_hamachi_connect: Conectarea la o rețea """"""""""""""""""""" +Pentru a conecta stația ``local`` la rețeaua privată vom, folosi comanda ``hamachi join`` urmată de numele rețelei la care vom conecta stația și parola rețelei: + +.. code-block:: + + root@local:~# hamachi join nume-prenume 12345667890 + Joining nume-prenume .. ok + root@local:~# hamachi list + * [nume-prenume] capacity: 2/5, subscription type: Free, owner: remote (253-932-022) + * 253-932-022 remote 25.114.254.180 alias: not set 2620:9b::1972:feb4 via server TCP + + +Rulând comanda ``hamachi list``, am afișat rețelele la care este conectată stația ``local`` și stațiile cu care împarte rețelele. +Adresa IP a stației ``remote`` din rețeaua privată este ``25.114.254.180``, conform rezultatului comenzii. + +Pentru a testa conectivitatea între stațiile ``local`` și ``remote`` vom rula comanda ``ping``: + .. code-block:: - student@uso:~$ sudo hamachi join nume-prenume 12345667890 + root@local:~# ping -c 2 25.114.254.180 + PING 25.114.254.180 (25.114.254.180) 56(84) bytes of data. + 64 bytes from 25.114.254.180: icmp_seq=1 ttl=64 time=76.5 ms + 64 bytes from 25.114.254.180: icmp_seq=2 ttl=64 time=92.3 ms + + --- 25.114.254.180 ping statistics --- + 2 packets transmitted, 2 received, 0% packet loss, time 1003ms + rtt min/avg/max/mdev = 76.592/84.493/92.394/7.901 ms + +.. _task_admin_remote_vpn_hamachi_connect_ex: + +Exercițiu: Crearea și folosirea unei rețele private +""""""""""""""""""""""""""""""""""""""""""""""""""" + +Creați o nouă rețea privată numită ``prenume-nume``, cu parola de acces ``anaaremere``. +Conectați stațiile ``local`` și ``remote`` la noua rețea. + +.. _task_admin_remote_vpn_private: Folosirea unui VPN privat ^^^^^^^^^^^^^^^^^^^^^^^^^ -Le vom da un reminder despre ce înseamnă un VPN privat, hostat de ei și îi vom trimite să vadă instrucțiunile de la laboratorul de networking pentru a își face setupul. +Pentru folosirea unui VPN privat este nevoie să avem o stație în Internet la care să avem acces atât de la stația locală (cum ar fi laptopul) cât și de la cea de la distanță (workstationul). +Putem obține acces la astfel de stații cumpărând acces la o mașină virtuală de la un serviciu de hosting, cum ar fi AWS, DigitalOcean, Microsoft Azure sau Linode. + +Odată ce am obținut o stație cu o adresă IP publică, este nevoie să configurăm un serviciu de VPN. +Pentru aceasta putem folosi infrastructura pe care am prezentat-o în secțiunea :ref:`network_connection`, infrastructură care pornește un server OpenVPN. + +.. _task_admin_remote_tunnel: Conectarea folosind un tunel SSH -------------------------------- +.. note:: + + Pentru rularea acestui demo, rulați în directorul ``~/uso.git/labs/10-task-admin/lab-containers/`` comanda ``./lab_prepare.sh install ssh-server``. + Pentru a ne conecta la infrastructura pentru această secțiune, vom folosi comanda ``./lab_prepare.sh connect`` având ca parametrul numele mașinii la care vrem să ne conectăm, ``local``, ``remote`` sau ``ssh-server``. + +Abordările pe care le-am discutat mai sus presupun accesul la un server central și drepturi de administrator din partea utilizatorului pentru instalarea aplicațiilor (cum ar fi Hamachi sau OpenVPN). +Dacă nu avem acces la un cont de administrator, nu putem să ne conectăm la stația de la distanță. + +O alternativă care nu presupune drepturi administrative sunt tunelurile SSH. +Un tunel SSH reprezintă o conexiune între două stații facilitată de protocolul SSH. +Prin această conexiune se pot "tunela" alte mesaje, inclusiv o altă conexiune SSH. + +Dezavantajul acestei abordări este că necesită accesul la un server terț care să fie accesibil de ambele stații. + +În această subsecțiune vom lucra cu 3 stații care sunt distribuite în felul următor: + +* ``local``, reprezintă stația "locală", adică laptopul de pe care ne-am conecta, dacă ar fi vorba de un scenariu real; + are o singură interfață de rețea cu adresa IP ``10.10.10.3``; +* ``remote``, reprezintă workstationul la care vrem să ne conectăm; + are o singură interfață cu adresa IP ``10.11.11.3``; +* ``ssh-server``, reprezintă serverul terț prin care ne vom conecta ca să ajungem la workstation; + această stație are două interfețe conectate la ea, cu adresele IP ``10.10.10.2`` și ``10.11.11.2``, dar în realitate aceasta ar avea o singură placă de rețea. + +Stațiile ``local`` și ``remote`` nu au conectivitate între ele, dar au conectivitate la stația ``ssh-server``, deoarece sunt fiecare în rețea cu stația. + +În continuare descriem pașii pentru folosirea tunelului SSH, pași care sunt prezentați și în animația de mai jos. + +.. figure:: ./gifs/reverse-ssh-tunnel.gif + :alt: Folosirea unui tunel invers SSH + :align: center + +.. _task_admin_remote_tunnel_init: + +Inițializarea tunelului SSH +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Primul pas necesar pentru conectarea la o stație prin tunel SSH este inițializarea tunelului. +Când inițializăm tunelul acesta va deschide portul ``4242`` pe stația ``ssh-server`` de la adresa ``10.11.11.2``, astfel încât mesajele trimise către portul ``4242`` vor fi trimise către portul ``22`` de pe stația ``remote`` , stația de pe care inițializăm tunelul SSH. +Vom folosi utilizatorul ``root`` și parola ``root`` pentru a ne conecta. + +Pentru a deschide tunelul vom folosi comanda următoare: + +.. code-block:: + + root@remote:~# ssh -N -R 4242:localhost:22 root@10.10.10.2 + The authenticity of host '10.10.10.2 (10.10.10.2)' can't be established. + ECDSA key fingerprint is SHA256:xV1orHYj4fhkc5HE91sfh8QhaVqke/AEMa8mYI423HY. + Are you sure you want to continue connecting (yes/no)? yes + Warning: Permanently added '10.10.10.2' (ECDSA) to the list of known hosts. + root@10.10.10.2's password: + +Opțiunile comenzii ``ssh`` folosite sunt următoarele: + +* ``-N`` este folosită atunci când deschidem tuneluri pentru a nu deschide shelluri în care să dăm comenzi; +* ``4242`` este portul pe care vrem să îl deschidem pe stația ``ssh-server``; +* ``localhost`` este stația către care vor fi trimise mesajele primite pe portul ``4242``. În cazul acesta mesajele vor fi trimise către ``localhost``, adică stația ``remote``, cea de pe care rulăm comanda de tunelare; +* ``22`` este portul de pe stația ``localhost`` către care vrem să fie trimise mesajele primite pe portul ``4242`` de pe stația ``ssh-server``; +* ``root@10.10.10.2``, utilizatorul și adresa IP a stației către care vrem să deschidem tunelul; + în cazul acesta este adresa IP a stației ``ssh-server``. + +.. admonition:: Atenție! + + După ce am pornit tunelul, comanda ``ssh`` nu va mai afișa nimic la terminal. + Tunelul va rămâne activ cât timp comanda ``ssh`` de mai sus rulează. + +Putem să verificăm că a fost deschis portul ``4242`` pe stația ``ssh-server`` rulând comanda ``netstat -tlpn``: + +.. code-block:: + + root@ssh-server:~# netstat -tlpn + Active Internet connections (only servers) + Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name + tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 24/sshd + tcp 0 0 127.0.0.1:4242 0.0.0.0:* LISTEN 99/sshd: root + tcp 0 0 127.0.0.11:42991 0.0.0.0:* LISTEN - + tcp6 0 0 :::22 :::* LISTEN 24/sshd + +Cât timp această fereastră rămâne deschisă, tunelul va fi activ. +Vom prezenta în secțiunea :ref:`task_admin_services_config_custom` cum să rulăm această comandă în afara terminalului și cum să ne asigurăm că tunelul este mereu deschis. + +.. _task_admin_remote_tunnel_usage: + +Folosirea tunelului SSH +^^^^^^^^^^^^^^^^^^^^^^^ + +Odată creat tunelul, vrem să îl folosim de pe stația ``local``, pentru a putea rula comenzi pe stația ``remote``. + +Pentru a face acest lucru, trebuie să ne conectăm la stația ``server``. Serverul ``server`` poate fi accesat la adresa ``10.11.11.2``. + +.. code-block:: + + root@local:~# ssh root@10.11.11.2 + root@10.11.11.2's password: + Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-52-generic x86_64) + + * Documentation: https://help.ubuntu.com + * Management: https://landscape.canonical.com + * Support: https://ubuntu.com/advantage + This system has been minimized by removing packages and content that are + not required on a system that users do not log into. + + To restore this content, you can run the 'unminimize' command. + Last login: Tue Jan 5 23:08:53 2021 from 10.11.11.3 + root@ssh-server:~# + +După cum am observat mai sus, în rezultatul comenzii ``netstat``, tunelul SSH este deschis pe portul ``4242`` al stației ``ssh-server`` și redirectează mesajele către portul ``22`` al stației ``remote``. +Pentru a ne conecta la acest port folosind clientul SSH, rulăm următoarea comandă: + +.. code-block:: + + root@ssh-server:~# ssh root@localhost -p 4242 + [...] + root@remote:~# + +Am folosit opțiunea ``-p`` pentru a ne conecta folosind SSH pe un alt port decât portul predefinit (``22``). +În comanda de mai sus ne-am conectat la stația ``localhost``, adică stația ``ssh-server`` dar, deoarece portul ``4242`` este de fapt un tunel, conexiunea a fost redirectată la stația ``remote``. + +Observăm că promptul s-a schimbat în ``root@remote:~#``, deci ne-am conectat la stația ``remote``. + +RD: Pus un sumar 1, 2, 3 cu pașii ce trebuie făcuți ca să ai o conexiune între laptop și workstation folosind tunel SSH și un intermediar. + +.. _task_admin_remote_tunnel_usage_ex: + +Exercițiu: Crearea și folosirea tunelurilor SSH +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Le vom lăsa instrucțiuni despre cum să facă un tunel printr-un server. -Problema aici e că nu știm dacă toți au acces la un server terț prin care să facă ssh. -Le putem arăta un demo didactic, iar la facultate pot să folosească fep, dar ceva practic pentru toți nu există. +Creați un tunel SSH care să ducă de la stația ``local`` la ``ssh-server`` folosind portul ``6970`` și conectați-vă la stația ``local`` din stația ``remote`` folosindu-vă de stația ``ssh-server`` ca mai sus.