mini guida ssh: tunneling e vnc

Sono a casa, con il pc home e voglio lavorare sul pc work dell’ufficio. Lo voglio fare perché lì c’è del software che non ho e non voglio installare a casa. E poi perché c’è tutto quello che mi serve per lavorare. Inoltre il pc work non ha un indirizzo ip pubblico, ma per fortuna almeno un computer dell’ufficio, public è accessibile via ssh dall’esterno. Per finire voglio lavorare con il mio solito dekstop (gnome nel mio caso). Ecco come fare.
Si sfruttano le capacità di tunneling di ssh e il software di desktop remoto VNC.

Con ssh da home mi collego a public, attivando contemporaneamente due tunnel. Uno mi servirà per collegarmi via ssh direttamente da home a work, l’altro per la connessione vnc, sempre da home a work:

[me@home ~]$ ssh -L 10022:work:22 -L 5901:work:5901 me@public

Ora con ssh posso collegarmi direttamente da home a public:

[me@home ~]$ ssh -p 10022 localhost

Su work editare il file ~/.vnc/xstartup e scommentare le righe seguenti:

unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

Ora siamo pronti ad attivare il server vnc.

[me@work ~]$ vncserver -geometry 1280x1024

Così facendo ho fatto partire un desktop virtuale su work. Ho scelto la stessa risoluzione dello schermo di casa, così potrò lavorare in full screen. Al primo lancio, vncserver ci chiederà una password, che dovremo utilizzare per collegarci con vncviewer.
Ora, finalmente, possiamo collegarci via vnc a desktop di work:

[me@home ~]$ vncviewer -Fullscreen -Fullcolor localhost:5901

Nota: il menu di vncviewer ha un menu che si apre con il tasto F8.

mini guida ssh: tunneling

Il tunneling ssh permette di attivare delle connessioni dirette tra la macchina di partenza (locale) e una qualsiasi macchina (pc1, pc2, ecc.) visibile dalla machina destinazione (remote), oppure tra la macchina destinazione e una qualsiasi macchina visibile dalla macchina di partenza. Schema della rete:

locale -> remote --- pc1
            +------- pc2

Se ad esempio vogliamo accedere da locale ad un web server attivo su pc1 dobbiamo effettuare una connessione ssh tra locale e remote indicando contemporaneamente l’apertura del tunnel tra una porta locale qualunque (es, 20080) e la porta 80 di pc1:

ssh -L 20080:pc1:80 user@remote

Fatto questo, un browser in esecuzione su locale può accedere al web server su pc1 usando l’URL http://localhost:20080/.

Ulteriori tunnel si possono attivare anche su una connessione ssh già attiva. In quest0 caso l’esempio precedente diventa:

ssh user@remote
~C

A questo punto compare il prompt ssh>. Digitare:

-L 20080:pc1:80

Si possono anche attivare connessioni al contrario. Se ad esempio vogliamo che da pc2 si possa fare ssh su locale, basta attivare un nuovo tunnel così:

-R 10022:localhost:22

Fatto questo, l’utente su pc2 può collegarsi a locale così:

ssh -p 10022 user@remote