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
:
root@red:~# ssh -l $USERNAME fep.grid.pub.ro -R 10022: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 10022 tcp 0 0 127.0.0.1:10022 0.0.0.0:* LISTEN tcp 0 0 ::1:10022 :::* LISTEN
unde $USERNAME
este numele contului de pe fep.grid.pub.ro
/cs.curs.pub.ro
. Introduceți parola corespunzătoare.
Observăm că se deschide portul 10022
pe fep.grid.pub.ro
. Acest port va fi folosit pentru tunelul invers care ne va duce pe stația red
.
10022
de pe server. În acest caz folosiți un alt port pe server (10122
, 10222
etc.).
Argumentul -R 10022:localhost:22
transmis comenzii ssh
are următoarea semnificație:
10022
- 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 (10022
). 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 10022 tcp 0 0 127.0.0.1:10022 0.0.0.0:* LISTEN tcp 0 0 ::1:10022 :::* LISTEN
După conectarea colegului la fep
, realizăm o conexiune prin tunelul SSH pe portul 10022
deschis:
[$USERNAME_COLEG@fep-62-2 ~]$ ssh -l root localhost -p 10022 Warning: Permanently added '[localhost]:10022' (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.