This is an old revision of the document!
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și o conexiune din exterior, se poate crea un tunel SSH invers. Tunel SSH invers înseamnă următorii pași:
Dorim să permitem conectarea la stația red
din Internet pe SSH. Vom crea o conexiune SSH “directă” de la stația red
la contul vostru de pe fep.grid.pub.ro
. Prin această conexiune veți tunela invers traficul SSH către red
permițând conexiunea din exterior.
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.r
:
root@red:~# ssh -l $USERNAME fep.grid.pub.ro -R 100XY:localhost:22 [...] $USERNAME@fep.grid.pub.ro's password: Last login: Mon Sep 9 09:55:37 2013 from 141.85.225.214 [$USERNAME@fep-62-2 ~]$ netstat -tln | grep 100XY tcp 0 0 127.0.0.1:100XY 0.0.0.0:* LISTEN tcp 0 0 ::1:100XY :::* LISTEN
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
.
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
.
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).
Discutați cu un coleg pentru a se conecta pe fep.grid.pub.ro
pe contul propriu și apoi de a se conecta către red
folosind contul portul deschis mai sus (100XY
). Pentru aceasta, colegul va folosi stația fizică și se va conecta pe contul său la fep.grid.pub.ro
:
student@mjolnir:~$ ssh -l $USERNAME_COLEG fep.grid.pub.ro [...]
unde $USERNAME_COLEG
este numele contului de pe fep.grid.pub.ro
/cs.curs.pub.ro
al colegului.
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 promtp 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 netstat
:
[$USERNAME_COLEG@fep-62-2 ~]$ netstat -tln | grep 100XY tcp 0 0 127.0.0.1:100XY 0.0.0.0:* LISTEN tcp 0 0 ::1:100XY :::* LISTEN
După conectarea colegului la fep
, realizăm o conexiune prin tunelul SSH pe portul 100XY
deschis:
[$USERNAME_COLEG@fep-62-2 ~]$ ssh -l root localhost -p 100XY Warning: Permanently added '[localhost]:100XY' (RSA) to the list of known hosts. root@localhost's password: [...] root@red:~#
În cadrul conexiunii ni se cere parola utilizatorului root
de pe stația red
(adică parola student
).
În final colegul a accesat stația red
, o stația cu adresă IP privată inaccesibilă din exterior. Pentru aceasta a 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.