20 October 2016  ·  sysadminlinuxfreebsd

SSH Tunneling


SSH ci permette di collegarci ad un server attraverso una connessione crittografata.
Tipicamente lo usiamo per accedere alla shell del server, ma controllando il manuale scoprirete che ha veramente tantissime opzioni ed utilizzi.
Uno tra questi è la possibilità di creare dei tunnel ssh.

Un caso tipico; abbiamo tre host:

host1, è il nostro PC
host2, è un server al quale riusciamo ad avere accesso tramite ssh
host3, è un server per noi non raggiungibile, ma host2 invece riesce a raggiungerlo

Questo potrebbe essere uno schema:


/-------\         /-------\         /-------\        
| Host1 | <-----> | Host2 | <-----> | Host3 | 
\-------/         \-------/         \-------/ 

Quello che vogliamo fare è utilizzare Host2 per raggiungere Host3. La comunicazione tra noi (Host1) ed Host2 avverrà tramite SSH. Tutto il traffico verso Host2 verrà inoltrato ad Host3, permettendoci quindi di comunicare con quest'ultimo come se per noi fosse raggiungibile. In particolare facciamo in modo che tutto ciò che inviamo alla porta 2000 del nostro PC venga inoltrato alla porta 3306 di Host3 (es. su Host3 sta girando un server MySQL che notoriamente risponde proprio a questa porta). Quindi nella shell del nostro PC (host1) digitiamo questo comando:

ssh -f -L 2000:host3:3306 -N nomeutente@host2

Il tunnel ssh a questo punto è pronto per essere utilizzato! Restando sull'esempio di connessione a MySQL vi accorgerete infatti come collegarsi alla porta 2000 del proprio PC (indirizzo 127.0.0.1) voglia dire di fatto collegarsi al server (host3) che prima non riuscivamo a raggiungere.

2016-10-10 21:00:17,929 DEBUG - select subject0_.id as id1_1_, subject0_.name as name1_2_ from subject subject0_ inner join node subject0_1_ on subject0_.id=subject0_1_.id where subject0_.name like ? limit ?
2016-10-10 21:00:18,006 TRACE - binding parameter [1] as [VARCHAR] - [%prova%]
2016-10-10 21:00:18,054 TRACE - extracted value ([id1_1_] : [BIGINT]) - [4]
2016-10-10 21:00:18,071 TRACE - extracted value ([name1_2_] : [VARCHAR]) - [prova]

Il tunnel ssh a questo punto è pronto per essere utilizzato!
Restando sull'esempio di connessione a MySQL vi accorgerete infatti come collegarsi alla porta 2000 del proprio PC (indirizzo 127.0.0.1) voglia dire di fatto collegarsi al server (host3) che prima non riuscivamo a raggiungere.

mysql -h 127.0.0.1 --port=2000 -u nomeUtente -p nomeDatabase

← Tutti gli articoli