Differences

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

Link to this comparison view

rl:labs:08:contents:10 [2015/12/08 11:23]
razvan.deaconescu [10. [10p] Problemă la conectarea SSH folosind chei]
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ă și vă veți conecta pe contul de pe ''​fep.grid.pub.ro''​.
-Problema este la directorul ​''​.ssh/'' ​din directorul home al utilizatorului ​''​ana''​. +
-</​note>​+
  
-<​note ​tip+<​note ​important
-Folosiți comanda<​code bash> +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> 
-ls -ld <​director>​ +[$USERNAME_COLEG@fep-62-2 ~]$ ss -tln | grep 100ZT 
-</​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.+tcp        0      0 127.0.0.1:​100ZT ​            ​0.0.0.0:​* ​                  ​LISTEN 
 +tcp        0      0 ::​1:​100ZT ​                  :::​* ​                       LISTEN 
 +</​code>​ 
 +În output-ul comenzii de mai sus ''​100ZT'' ​este portul deschis ​de coleg.
 </​note>​ </​note>​
  
-<​solution -hidden>​ +După conectarea colegului la ''​fep'',​ realizăm o conexiune prin tunelul SSH pe portul ''​100ZT''​ deschis de coleg:<​code ​bash
-Mesajul complet este<​code>​ +[$USERNAME_COLEG@fep-62-2 ~]$ ssh -l student localhost -p 100ZT 
-Authentication refusedbad ownership or modes for directory /home/ana/.ssh+WarningPermanently added '​[localhost]:​100ZT'​ (RSA) to the list of known hosts. 
 +root@localhost'​s password:  
 +[...] 
 +root@red:~#
 </​code>​ </​code>​
-Sunt permisiuni nepotrivite pe directorul ​''​/​home/​ana/​.ssh''​. Investigăm permisiunile:<​code bash> +În cadrul conexiunii ni se cere parola utilizatorului ​''​root'' ​de pe stația ​''​red'' ​(adică parola ​''​student''​).
-root@host:​~#​ ls -ld /​home/​ana/​.ssh/​ +
-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. +Î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.
- +
-<​solution -hidden>​ +
-Reducem permisiunile pe directorul ​''​/​home/​ana/​.ssh/​''​+
-<code bash> +
-root@host:​~#​ chmod 755 /​home/​ana/​.ssh/​ +
-root@host:​~#​ ls -ld /​home/​ana/​.ssh/​ +
-drwxr-xr-x 2 ana ana 4096 Sep 18  2013 /​home/​ana/​.ssh/​ +
-</​code>​ +
-</​solution>​ +
- +
-După corectarea problemeiverificați funcționarea conectării SSH folosind chei publice:<​code bash> +
-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.1449566587.txt.gz · Last modified: 2015/12/08 11:23 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