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.

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