Differences

This shows you the differences between two versions of the page.

Link to this comparison view

rl:labs:08:contents:10 [2014/12/09 11:32]
razvan.deaconescu
rl:labs:08:contents:10 [2024/10/29 14:41] (current)
eduard.dumistracel [10. [10p] Tunel SSH invers]
Line 1: Line 1:
-==== 10. [10p] Problemă la conectarea ​SSH folosind chei ====+==== 10. [10p] Tunel SSH invers ​====
  
-Din contul utilizatorului ''​student''​ de pe stația ''​red''​ conectați-vă la utilizatorul ''​ana'' ​de pe stația ''​host''​ prin SSH prin rularea comenzii<​code bash> +Sunt situații în care dorim ca o stație să fie accesibilă din exterior, dar este dificil să obținem un port în gateway (pentru //port forwarding//​):​ fie din rațiuni administrative,​ fie din motive de securitate. Pentru a permite totușo conexiune din exterior, se poate crea un tunel SSH invers. Tunel SSH invers înseamnă următorii pași: 
-student@red:​~$ ssh -l ana host +  * se creează o conexiune SSH de la o stație cu adresă IP privată la un server extern cu adresă IP publică, 
-ana@host'​s password: ​+  * se deschide un port pe serverul cu adresă IP publică 
 +  * traficul către acel port este tunelat prin conexiunea SSH către stația cu adresă IP privată
  
-</​code>​ +Dorim să permitem conectarea la stația ''​red''​ din Internet pe SSHVom crea o conexiune SSH "​directă"​ de la stația ''​red'' ​la contul vostru ​de pe ''​fep.grid.pub.ro''​. Prin această conexiune vețtunela invers traficul SSH către ''​red''​ permițând conexiunea din exterior.
-Observați că vi se cere parolaFolosiț''​Ctrl+c'' ​pentru a anula promptul ​de parolă șa reveni la shell-ul inițial.+
  
-Afișați fișierul care conține cheia publică stocată local și cel care conține cheia publică stocată la distanță. Folosiți comenzile<​code bash> +Pentru început, de pe stația ''​red''​ creăm o conexiune SSH directă către contul de pe ''​fep.grid.pub.ro'' ​(identic cu cel de pe ''​cs.curs.pub.ro''​):​ 
-student@red:​~$ cat ~/​.ssh/​id_rsa.pub  +<code bash> 
-ssh-rsa AAAAB3NzaC1yc[...] student@red +root@red:~ssh -l $USERNAME fep.grid.pub.ro ​-R 100XY:​localhost:​22
- +
-student@red:​~$ ssh -l ana host "cat ~/​.ssh/​authorized_keys"​ +
-ana@host's password:  +
-ssh-rsa AAAAB3NzaC1yc[...] student@red +
-</​code>​ +
-Pentru a doua comandă introduceți parola ​''​student''​. ​Observați că cele două fișiere sunt identiceÎn mod obișnuit conectarea SSH ar trebui să funcționeze pe bază de chei, nu ar trebui să solicite parolă+
- +
-O primă metodă de identificare a problemelor de conectare este să rulați comanda de conectare cu opțiune de //​verbosity//:​<code bash> +
-student@red:~ssh -vvv -l ana host+
 [...] [...]
-debug3: remaining preferred: ,password +$USERNAME@fep.grid.pub.ro'​s ​password:  
-debug3authmethod_is_enabled password +Last loginMon Sep  9 09:55:37 2013 from 141.85.225.214 
-debug1Next authentication methodpassword +[$USERNAME@fep-62-2 ~]$ ss -tln | grep 100XY 
-ana@host's password:  +tcp        0      0 127.0.0.1:​100XY ​            ​0.0.0.0:​* ​                  ​LISTEN ​      
-</​code> ​Din păcate mesajele afișate ​nu oferă informații utileFolosiți ''​Ctrl+c'' ​pentru a anula promptul de parolă și a reveni la shell-ul inițial.+tcp        0      0 ::​1:​100XY ​                  :::*                        LISTEN 
 +</​code> ​unde ''​$USERNAME''​ este numele contului de pe ''​fep.grid.pub.ro''/''​cs.curs.pub.ro'',​ iar ''​XY''​ este un identificator numeric unic al stației din laborator (dacă nu aveți pe monitorul stației din laborator un identificator discutați cu asistentul)Introduceți parola corespunzătoare contului vostru de pe ''​fep.grid.pub.ro''/''​cs.curs.pub.ro''​.
  
-Pentru identificarea problemei vrem să consultăm fișierele jurnal ale serverului de SSH de la distanță. Autentificați ca ''​root''​ pe stația ​''​host''​, folosiți comanda ''​tail''​ pentru a urmări mesajele de jurnalizareComanda rulează în continuu și afișează noile mesaje din fișierul primit ca argument pe măsură ce acestea apar:<​code bash> +Observăm că se deschide portul ​''​100XY''​ pe ''​fep.grid.pub.ro''​. ​Acest port va fi folosit pentru tunelul invers care ne va duce pe stația ''​red''​.
-root@host:​~#​ tail -f /​var/​log/​auth.log  +
-[...] +
-Nov 14 16:48:31 host sshd[20898]:​ Authentication refused: bad ownership or modes for directory /​home/​ana/​.ssh +
-Nov 14 16:49:09 host sshd[20898]:​ Connection closed by 192.168.1.2 [preauth] +
-</​code>​ Pentru a genera din nou mesaje legate de problemă, ​pe stația ''​red'' ​rulați, din nou, comanda de conectare SSH:<​code bash> +
-ssh -l ana host +
-</​code>​ Folosiți ''​Ctrl+c''​ pentru a anula promptul de parolă și a reveni la shell-ul inițial.+
  
-Urmăriți mesajele ​de jurnalizare ale serverului. Urmăriți linia care începe cu "​Authentication refused:"​.+Argumentul ''​-R 100XY:​localhost:​22''​ transmis comenzii ''​ssh''​ are următoarea semnificație: 
 +   * ''​100XY''​ - portul ​de pe server pe care se vor asculta conexiuni care vor fi tunelate invers; 
 +   * ''​localhost''​ - stația către care vor fi trimise pachetele primite prin tunel (chiar stația locală); 
 +   * ''​22''​ - portul către ​care vor fi trimise pachetele primite prin tunel (adică portul SSH local).
  
-<note tip> +După ce alți colegi rulează comenzile similare vă veți putea conecta ​pe stația ​''​red'' ​a acestora folosind portul deschis de ei; discutați cu alți colegi ca să vă spună ce port au deschis. Pentru aceasta, veți folosi stația fizică șvă veți conecta pe contul de pe ''​fep.grid.pub.ro''​.
-Folosiți comanda<​code bash> +
-ls -ld <​director>​ +
-</​code> ​pe un director pentru a afișa permisiunile pe directorul ​''​<​director>​''​. Permisiunile ar trebui ​să corespundă cu permisiuni pe directoarele identice deținute de alți utilizatori. +
-</​note>​+
  
-<solution -hidden+<note important
-Mesajul complet ​este<​code>​ +Pe ''​fep.grid.pub.ro''​ rulează un load balancer pentru SSH. Din acest motiv este posibil să intrați pe "​celălalt"​ sistem. Verificați că numele de host din prompt corespunde cu cel pe care l-ați folosit inițial la crearea tunelului: adică ambele să fie ''​fep-62-2''​ sau ''​fep-62-1''​. Pentru siguranță folosim și comanda ''​ss'':​<​code ​bash
-Authentication refusedbad ownership or modes for directory /home/ana/.ssh+[$USERNAME_COLEG@fep-62-2 ~]$ ss -tln | grep 100ZT 
 +tcp        0      0 127.0.0.1:100ZT             0.0.0.0:​* ​                  ​LISTEN 
 +tcp        0      0 ::​1:​100ZT ​                  :::​* ​                       LISTEN
 </​code>​ </​code>​
-Sunt permisiuni nepotrivite pe directorul ''/​home/​ana/​.ssh''​. Investigăm permisiunile:<​code bash> +În output-ul comenzii de mai sus ''​100ZT'' ​este portul deschis ​de coleg
-root@host:​~#​ ls -ld /​home/​ana/​.ssh/​ +</note>
-drwxrwxrwx 2 ana ana 4096 Sep 18  2013 /​home/​ana/​.ssh/​ +
-</​code>​ +
-Permisiunile sunt prea permisive (drepturi complete). Întrucât directorul ​''​/​home/​ana/​.ssh/​'' ​conține și fișierul ce reprezintă cheia privată a utilizatorului ''​ana''​ (posibil chiar mai multe fișiere ​de cheie privată), care trebuie să rămână **privat**, trebuie permisiuni mai restrictive pe fișier+
-</solution>+
  
-Corectați problema indicată de fișierele jurnal. +După conectarea colegului la ''​fep'',​ realizăm o conexiune prin tunelul SSH pe portul ​''​100ZT'' ​deschis de coleg:<code bash> 
- +[$USERNAME_COLEG@fep-62-2 ~]$ ssh -l student localhost -p 100ZT 
-<​solution -hidden>​ +Warning: Permanently added '​[localhost]:​100ZT'​ (RSA) to the list of known hosts. 
-Reducem permisiunile ​pe directorul ​''​/​home/​ana/​.ssh/​'':​ +root@localhost'​s password 
-<code bash> +[...] 
-root@host:~# chmod 755 /home/ana/.ssh/ +root@red:~#
-root@host:~# ls -ld /​home/​ana/​.ssh/​ +
-drwxr-xr-x 2 ana ana 4096 Sep 18  2013 /​home/​ana/​.ssh/​+
 </​code>​ </​code>​
-</​solution>​+În cadrul conexiunii ni se cere parola utilizatorului ''​root''​ de pe stația ''​red''​ (adică parola ''​student''​).
  
-După corectarea problemeiverificați funcționarea conectării SSH folosind chei publice:<​code bash> +În final ați accesat stația ''​red''​ a coleguluio stația cu adresă IP privată inaccesibilă din exterior. Pentru aceasta ați folosit o altă stație (care ar putea fi din altă rețea) pentru a se conecta la ''​fep.grid.pub.ro''​ și de acolo la ''​red''​ prin intermediul tunelului invers creat inițial.
-student@red:​~$ ssh -l ana host +
-[...+
-ana@host:~$  +
-</​code>​+
  
-Dacă ați realizat configurația corectă atunci comanda de mai sus va conduce la conectarea SSH prin cheie publică, fără vă fi solicitată parola de conectare pentru utilizatorul ''​ana''​ de pe stația ''​host''​.+Creați un fișier pe stația ''​red''​ proaspăt accesată, iar colegul poate verifica faptul că, într-adevărați accesat container-ul său prin tunelul SSH invers ​pe care l-a creat anterior.
rl/labs/08/contents/10.1418117562.txt.gz · Last modified: 2014/12/09 11:32 by razvan.deaconescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0