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

mini guida ssh

Una sola volta, generare la coppia di chiavi, pubblica e privata, con il comando:

ssh-keygen -t rsa

Selezionare la voce di menu Preferences -> Sessions, quindi la pagina Startup programs. Premere il pulsante Add e aggiungere il comando ssh-add (non cambiare la priorità proposta). Uscire da gnome e rientrare. Verrà chiesta la passphrase per ssh, quella scelta durante la generazione delle chiavi.

A questo punto, per poter fare login su un’altra macchina, dovete aggiungere la vostra chiave pubblica alla lista delle chiavi autorizzate. In pratica:

ssh utente@remote "mkdir -m 755 .ssh"
cat ~/.ssh/id_rsa.pub | ssh utente@remote "cat - >> .ssh/authorized_keys"

Finito. Ora potete fare ssh sulla macchina remota senza richiesta di password.

Ulteriori Info: http://www.brandonhutchinson.com/Passwordless_ssh_logins.html