Blog

Tunnel SSH e autenticazione senza password

Un articolo pratico e dettagliato per creare un tunnel SSH tramite un terminale Unix e per generare un sistema di autenticazione a due chiavi, senza richiesta di password.

Tunnel SSH e autenticazione senza password

Il metodo più semplice per la connessione ad un server tramite SSH, prevede l'utilizzo da terminale di un solo comando:

ssh user@ip_address


Una volta digitato il comando e premuto <INVIO> verrà richiesta la password di accesso.
Tuttavia, le capacità di SSH vanno molto al di là di ciò che potrebbe apparire a prima vista. Andiamo ora ad analizzare alcune funzionalità avanzate.

Creare un tunnel SSH

Capita a volte, in una rete aziendale, a scuola, o in altri luoghi pubblici, di avere accesso limitato a diversi servizi, quali MSN, Skype, Sopcast, VNC e molti altri.
E' possibile oltrepassare queste limitazioni grazie ad SSH, creando un vero e proprio tunnel cifrato tra il nostro computer ed un server SSH esterno, che farà da ponte verso il servizio di cui abbiamo bisogno.
Gli unici requisiti sono un server SSH esterno ed un client SSH sul computer che stiamo usando.

ssh -l utente_server_ssh -L mia_porta:indirizzo_destinazione:porta_destinazione ip_server_ssh

Connessione a MSN Messenger dall'interno di una rete protetta
Se l'amministratore di rete ha bloccato l'accesso ad MSN dall'interno della vostra rete, vi basta connettervi ad un server SSH esterno (ad esempio 88.102.109.80) per creare un tunnel fino al vostro computer.

ssh root -L 2000:messenger.hotmail.com:1863 88.102.109.80


A volte invece il problema è l'accesso ad uno dei computer interni ad una rete remota, di cui soltanto il server SSH permette connessioni dall'esterno della stessa.
Se il server ssh è dietro ad un router, è sufficiente abilitare il portforward della porta TCP 22 verso l'ip locale del server ssh. Non è necessario dare accesso da nessun'altra "porta" TCP.
Il tunnel SSH provvede a riversare il traffico di una porta del computer interno alla rete, direttamente sul nostro computer, come al solito in una connessione sicura e cifrata che passa tramite il server pubblico della rete stessa.

ssh -l utente_server_ssh -L mia_porta:ip_locale:porta_locale ip_server_ssh

Connessione HTTP ad un computer interno di una rete remota
Se il web server della vostra azienda è installato su un computer senza collegamenti diretti ad internet, possiamo procedere come segue, per visualizzarlo direttamente da casa nostra.

ssh -l root -L 4444:192.168.1.200:80 88.104.109.22


A questo punto, presupponendo che il webserver si trovi all'indirizzo 192.168.1.200, si potrà accedere alla sua porta 80, semplicemente visitando dal browser l'indirizzo:

http://127.0.0.1:4444

Connessione VNC ad un computer interno di una rete remota
VNC è un software che permette il controllo remoto di una macchina, praticamente permette di utilizzare un computer da remoto senza particolari limitazioni. E' molto utilizzato per fare assistenza remota, senza quindi bisogno di spostarsi fisicamente all'interno delle aziende per dare supporto in caso di problemi.
Ma se il computer che ha bisogno di assistenza è all'interno di una rete, il cui unico appiglio è un server SSH? Creiamo un tunnel!

ssh -l paolo -L 12345:192.168.1.11:5900 88.104.100.28


Grazie al server SSH aziendale, raggiungibile all'indirizzo 88.104.100.28 con l'utente "paolo", abbiamo così creato un ponte che ci permette di connetterci al computer 192.168.1.11 digitando da terminale il comando:

vncviewer 127.0.0.1::12345

Connessione VNC sicura al server aziendale
Lasciare aperta la porta 5900 sul server aziendale non è di certo una buona idea, in quanto qualunque malintenzionato potrebbe scovare le vostre password e quindi tranquillamente entrare in possesso del server mediante VNC. Nel caso vi troviaste all'interno della rete di cui fa parte il server da raggiungere, 192.168.1.200, che ha aperto soltanto la porta 22 (SSH), dovete creare un tunnel come segue.

ssh -l lord -L 12345:127.0.0.1:5900 192.168.100.200


Come nel caso precedente, per connettersi al server VNC, basta un comando da terminale.

vncviewer 127.0.0.1::12345

ATTENZIONE: il tunnel SSH funziona solo con il protocollo TCP. Non funziona con UDP, quindi non ci possono passare sopra le chiamate VoIP.

Autenticazione SSH senza password

E' possibile utilizzare SSH senza utilizzare la password per accedere alla macchina remota, ma sfruttando l'uso delle chiavi.

Il procedimento consiste nel generare 2 chiavi, una pubblica ed una privata, che serviranno al client per essere riconosciuto e per permettergli l'accesso all'host remoto senza bisogno di password.

Per prima cosa bisogna generare le due password mediante il comando ssh-keygen, come di seguito descritto

ssh-keygen -b 2048 -t rsa Generating public/private rsa key pair.
Enter file in which to save the key (/home/utente_locale/.ssh/id_rsa):  # percorso di salvataggio chiavi:
                                                                       # premere INVIO per utilizzare la cartella di default
Created directory '/home/utente_locale/.ssh'.
Enter passphrase (empty for no passphrase):                             # digitare una passphrase che verrà richiesta per connettersi
Enter same passphrase again:                                            # lasciando vuoto non verrà richiesta alcuna passphrase alla connessione
Your identification has been saved in /home/utente/.ssh/id_rsa.         # file contenente la chiave privata
Your public key has been saved in /home/utente/.ssh/id_rsa.pub.         # file contenente la chiave pubblica
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx utente_locale@ip_locale

A questo punto sarà necessario copiare la chiave pubblica sul server, tramite i seguenti comandi:

scp /home/utente_locale/.ssh/id_rsa.pub utente_remoto@ip_remoto:.

Ora bisogna accedere al server e copiare il contenuto del file appena uploadato nel file /home/utente_remoto/.ssh/authorized_keys

cat /home/utente_remoto/id_rsa.pub >> /home/utente_remoto/.ssh/authorized_keys

Non rimane che cancellare il file uploadato

rm /home/utente_remoto/id_rsa.pub

Sarà quindi possibile accedere all'host remoto senza bisogno della password

ssh utente_remoto@ip_remoto

Nel caso in cui sia stata settata una passphrase (vivamente consigliato!!), essa verrà richiesta al login.

1 commenti

  1. FrankRock19 luglio 2010, 02:02:58

    Ciao ho un amico che ha un pc con ubuntu e shhopen-server, seguendo la tua guida ero riuscito a collegarmi con la mia chiave pub inserita nel suo pc, ma adesso non funziona piu. ho provato a cancellare i file known_hosts e autorized_key e ho rifatto tutto da capo. Ma mi chiede solo la password ongi volta anziche la prima volta la mia chiave... come posso risolvere?

Solo gli utenti registrati possono lasciare commenti.

© Copyright ©2008-2020. Tutti i diritti riservati.