VNC su SSH per connessioni sicure
Attenzione
Questo articolo è stato pubblicato più di un anno fa, potrebbero esserci stati sviluppi.
Ti preghiamo di tenerne conto.
Oggi vediamo come controllare una macchina remota tramite gui con VNC attraverso un tunnel sicuro SSH.
Per chi non lo sapesse, in estrema sintesi, VNC (Virtual Network Computing) è un sistema per display remoto che permette di vedere un ambiente “desktop” (GUI) in funzione non solo sulla macchina su cui è in esecuzione, ma ovunque da internet da una grande varietà di architetture.
SSH (Secure SHell) invece è un programma per fare il login ed eseguire comandi su una macchina remota. La comunicazione avviene in modo cifrato (tunneling) tra due host inaffidabili su reti anche diverse. Attraverso SSH possono essere indirizzate connessioni X11 e porte TCP/IP.
Ed è proprio X11 che vogliamo indirizzare nel tunnel SSH. In questo modo avremo una connessione X11 non sicura all’interno di un tunnel SSH sicuro (rendendo tutta l’operazione sicura).
Alla fine non è una operazione complessa. Dobbiamo istruire SSH alla creazione di un tunnel locale che inoltri localhost sulla porta 5901 alla medesima porta su una macchina remota, ma attraverso la porta SSH di default (22). Il requisito essenziale è quindi l’accesso alla macchina remota tramite la porta 22. Prestiamo attenzione, quindi, anche al port-forwarding sul router, ai firewall fisici e ad eventuali firewall software (iptables) installati su client e server. Senza, la procedura non può funzionare.
Cosa serve?
Sulla macchina locale:
- OpenSSH
- VNC Viewer (qualsiasi viewer VNC)
Sulla macchina remota:
- OpenSSH server
- VNC server
L’installazione è molto elementare. Per Debian e derivate:
~# apt install openssh vnc-server vnc-viewer
Per RedHat e derivate:
~# yum install openssh-server openssh-clients vnc-server vnc-viewer
Possiamo usare qualsiasi viewer VNC. Io preferisco usare il classico viewer presente nei repository.
Creare il tunnel SSH
La prima cosa da fare è creare la connessione cifrata che instradi i pacchetti da localhost (porta 5901) all’host remoto (porta 5901) attraverso la porta 22. Lo facciamo in un singolo comando:
~$ ssh -L 5901:localhost:5901 user@REMOTE_IP
Con user
intendiamo l’utente esistente nella macchina remota, con REMOTE_IP intendiamo l’IP remoto della macchina a cui vogliamo connetterci. Attenzione: non sempre root è configurato per accettare connessioni SSH in ingresso.
Se è la prima volta che ti connetti in SSH con quell’host ti verrà chiesto se vuoi aggiungere quel particolare host alla lista degli host conosciuti: ~/.ssh/known_hosts
.
A questo punto occorre inserire la password dell’utente registrato nella macchina remota a cui vogliamo connetterci.
Per una connessione ancora più sicura sarebbe consigliabile usare l’autenticazione SSH su chiavi. Forse ne parlerò in qualche articolo più avanti.
Collegare il client VNC
Ora dobbiamo attivare il client VNC. Come già detto non importa quale usi, quello che importa è l’indirizzo che usi per stabilire la connessione. Anziché scrivere l’IP della macchina remota dovremo scrivere localhost:5091
. Questo perché abbiamo già creato un tunnel dal client:5901 al server:5901. Una volta che ci connetteremo con localhost il client VNC userà il tunnel SSH appena creato per connettersi al server sulla porta 5901.
Benché esistano client che integrano la funzione SSH all’interno di VNC viewer questo è il metodo più semplice per capire cosa succede quando inoltriamo un flusso dati su SSH.
0 commenti