SSH (Secure Shell) è un protocollo che ci permette di accedere in modo sicuro a computer remoti, sostanzialmente come Telnet, ma utilizzando algoritmi di crittografia che ci aiutano a mantenere la connessione protetta, soprattutto se dobbiamo accedere a computer che svolgono una funzione importante all'interno di un'organizzazione.
Generalmente per accedere dobbiamo fornire il nostro nome utente e l'indirizzo del computer, in modo che il server SSH ci chieda la password di accesso:
ssh usuario@equiporemoto
Dal momento in cui il client avvia la prima connessione tra il computer remoto e noi, le informazioni viaggiano già in sicurezza, impedendo a qualcuno di ottenere le nostre credenziali di accesso a tale computer, tuttavia SSH è un protocollo molto adattabile che ci offre molte possibilità.
SCP
Il primo di questi è poter trasferire file tra il client e il computer remoto, senza la necessità di montare un server FTP o NFS, semplicemente usando SCP (Secure CoPy) che la maggior parte dei server SSH implementa:
scp archivo.tar.gz usuario@equiporemoto:/home/usuario
scp usuario@equiporemoto:/var/log/messages messages.txt
Tunneling SSH
Questa funzionalità è molto utile, poiché ci consente di inviare e ricevere informazioni che non sono necessariamente comandi di shell tra il client e il computer remoto, ad esempio la normale navigazione. Se non indovini quale utilità possa avere, pensa a quanto segue: devi accedere a una pagina, ma il luogo in cui ti trovi ha un firewall implementato che blocca proprio quella pagina, quindi possiamo fare il 'tunneling' con un telecomando computer che non ha detti blocchi e naviga in detta pagina tramite la nostra sessione SSH:
ssh -D 8888 usuario@equiporemoto
Una volta connesso, il nostro client SSH 'ascolta' sulla porta 8888 come un server proxy, in modo che possiamo configurare il nostro browser e tutto il traffico viene trasmesso attraverso la sessione SSH
Un altro esempio che mi viene in mente è quando, a causa di alcune restrizioni geografiche, non possiamo accedere a un servizio web da dove ci troviamo, quando si effettua il tunnel, detto servizio web rileva l'IP del nostro server remoto come sorgente, non il nostro IP client. Questo è in qualche modo equivalente alle VPN (Virtual Private Network)
SSH inverso
Se per qualche motivo abbiamo bisogno di accedere a un computer che si trova dietro un firewall e questo non ci consente di reindirizzare il traffico SSH ad esso, possiamo eseguire un 'SSH inverso', in modo tale che quel computer si connetta a un altro server SSH, a cui possiamo anche connetterci per accedere alle apparecchiature dietro il firewall. Un esempio che ci viene in mente è quando vogliamo aiutare un amico che non ha idea di come configurare un reindirizzamento sul proprio modem, ma dobbiamo accedere al proprio computer da remoto:
Amico -> Modem -> Server SSH <- Chi siamo
I passaggi da seguire sono relativamente molto semplici:
Amigo
ssh -R 9999:localhost:22 usuario@servidorssh
L’AZIENDA
ssh usuario@servidorssh
Una volta all'interno del server SSH, possiamo connetterci con il team del nostro amico utilizzando
ssh amigo@localhost -p 9999
Come puoi vedere, tutta la magia sta nel parametro -R, che dice al server intermedio che sulla porta 9999 il computer del nostro amico sta ascoltando ora come server.
Queste sono solo alcune delle possibilità che SSH ci offre ma vi invito a sperimentarne altre, ad esempio; possiamo fare script non assistiti usando chiavi RSA, reindirizzare le sessioni X (modalità grafica) al nostro ambiente grafico, solo per citarne alcuni.