Se hai appena acquistato il tuo VPS (Virtual Private Server) oppure devi accedere a un'istanza cloud su Amazon (AWS), Microsoft Azure o a un altro server remoto fornito dalla tua azienda o dall'università, hai probabilmente bisogno di utilizzare SSH (Secure Shell): uno strumento che ti consente di impartire comandi a un altro sistema connesso in rete tramite il tuo tradizionale PC. Ebbene: questa è la Guida Definitiva a SSH con Window, Linux o Mac, nella quale vedremo proprio come usare SSH con facilità
Ma... che cos'è SSH? Il modo più semplice per spiegarlo è tramite un'analogia. Hai presente i programmi come Desktop Remoto oppure TeamViewer, che ti consentono di controllare un altro PC da lontano? Ebbene: allo stesso modo, SSH ti permette di lavorare su un sistema da remoto, con l'unica differenza che funziona da linea di comando, e non tramite interfaccia grafica.
» Leggi anche: Come controllare un PC Windows da lontano: guida a Supremo
Ne deriva che, dopo aver eseguito login da remoto sul sistema che vogliamo controllare, possiamo impartire comandi da terminale ed eseguirli sul sistema remoto, e non in locale
Vediamo un esempio nell'immagine seguente: attualmente mi trovo a casa a Ferrara e, dal mio PC con Windows 10, mi sono collegato in SSH al server che eroga il sito TurboLab.it, che si trova in un datacenter a Milano e monta Linux (Ubuntu). Una volta "dentro", ho impartito il comando lsb_release -a
per visualizzare i dettagli del sistema operativo in uso
SSH viene impiegato soprattutto per controllare "server" (nel senso di "sistemi che erogano servizi") e non tanto PC desktop, ma la sostanza non cambia. Inoltre: generalmente ci si collega a server Linux, ma anche Windows supporta SSH in modo analogo.
Guida SSH: cosa serve, cosa si può fare
Per usare SSH abbiamo bisogno di alcuni elementi:
- un PC dotato di Windows, Linux o Mac
- un computer remoto al quale collegarci - può essere un VPS, un server cloud, un Raspberry Pi o una macchina virtuale
- l'indirizzo IP (ad esempio:
95.141.36.145
) oppure il nome a dominio (es:turbolab.it
) del sistema remoto al quale vogliamo collegarci - le credenziali (nome utente e password, oppure una "chiave") che ci autorizzino ad accedere al computer remoto in questione
Una volta "dentro", sarà come se avessimo fisicamente collegato la tastiera e lo schermo al computer remoto.
SSH è completamente crittografato e sicuro: tutte le password, i comandi inviati e le risposte mostrate a terminale sono visibili solo sul nostro PC e sul server al quale siamo connessi, persino se stiamo utilizzando una connessione Wi-Fi pubblica e senza alcuna protezione. Chiunque riuscisse ad intercettare le informazioni scambiate si ritroverebbe con lunghe stringhe di dati cifrati e senza senso.
Alcune note per gli utenti Windows
- Il comando
ssh
che utilizzeremo fra poco è integrato nativamente su Windows 10 1709 (vecchia versione di settembre 2017) e successive, comprese tutte le build di Windows 11 - In ogni caso, potrebbe essere utile aggiornare SSH all'ultima versione disponibile (l'update non è sempre automatico)
- Chi utilizzasse ancora Windows 8 oppure Windows 7 deve ripiegare su un programma di terze parti, come PuTTY
Guida SSH, Passo 1: Aprire il Terminale
Iniziamo dunque aprendo il Terminale:
- Windows: il vecchio Prompt dei comandi va benissimo, ma raccomando caldamente di installare il più moderno Windows Terminal
- Linux: Come aprire il terminale di Ubuntu
- Mac: Come aprire il Terminale/Prompt dei comandi su Mac
Guida SSH, Passo 2: La sintassi del comando SSH
A questo punto siamo già pronti ad avviare la connessione SSH tramite un comando simile a questo:
ssh nomeUtente@server.com
Dove:
ssh
: è il nome del comandonomeUtente
: è lo username con il quale eseguire login al server remotoserver.com
: è l'indirizzo IP (ad esempio:95.141.36.145
) oppure il nome a dominio (es:turbolab.it
) del computer remoto al quale desideriamo connetterci
Attenzione! Il nome utente da digitare deve essere quello di un account valido e preventivamente creato sul server remoto, e potrebbe essere diverso da quello in uso sul PC locale!
Guida SSH, Passo 3: Attendere la risposta
Non appena impartito il comando, dovremo attendere la risposta del computer remoto. Se, dopo alcuni secondi di attesa, ancora non succede nulla, significa che il server al quale stiamo tentando di collegarci non risponde. Dobbiamo dunque diagnosticare il problema seguendo quest'altra guida:
Guida SSH, Passo 4: Accettare la chiave
Quando ci colleghiamo ad un determinato server tramite SSH per la primissima volta, il nostro PC non ha modo di verificare la sua identità. Di conseguenza, mostra un messaggio di avviso simile a questo:
The authenticity of host 'server.com (192.168.0.42)' can't be established.
ECDSA key fingerprint is SHA256:MG...bGcI.
Are you sure you want to continue connecting (yes/no)?
Quello che fanno TUTTI nella quotidianità è digitare yes
e battere Invio
senza tante preoccupazioni, di modo da procedere. Il nostro PC salverà così l'identità digitale ricevuta, associandola al server al quale stiamo tentando di accedere. In futuro, quando ci ri-connetteremo a questo stesso server, l'avviso non verrà più mostrato.
In vero, quello che bisognerebbe fare è verificare puntualmente l'identità del sistema al quale ci stiamo connettendo.
Come minimo, diamo un'occhiata all'indirizzo IP mostrato nella risposta e verifichiamo che sia conforme a quello che ci aspettiamo: nello screenshot precedente, ad esempio, si nota che l'indirizzo IP mostrato (192.168.0.42
) non è quello del dominio turbolab.it
: questo è un campanello d'allarme (ad intensità vuvuzela!) che qualcosa non va, e il server al quale ci stiamo per connettere non è quello che ci aspettiamo.
Chi voglia essere ancora più professionale, e avere l'assoluta certezza che il server al quale stiamo per connetterci sia realmente quello che ci aspettiamo, deve confrontare l'identità digitale mostrata a schermo (la stringa simile a SHA256:MG...bGcI
) con quella materialmente usata dal server remoto. L'operazione non è banale, dato che ancora non siamo "dentro": se disponiamo di un accesso al server tramite un altro canale (l'interfaccia web del provider che ci fornisce il VPS, ad esempio), possiamo visualizzare questa informazione impartendo questo comando sul server:
ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
Chi invece stesse utilizzando un server gestito da altri e non disponga di altri tipi di accesso, vorrà comunicare la stringa simile a SHA256:MG...bGcI
, visualizzata a schermo, al sistemista che gestisce il server remoto, e chiedere conferma
A questo punto, non dobbiamo far altro se non confrontare la stringa che inizia con SHA256:
qui visualizzata con quella che abbiamo ricevuto in risposta al tentativo di connessione via SSH, ed assicurarci che siano identiche.
Guida SSH, Passo 5: Digitare la password
A questo punto, il server remoto potrebbe "buttarci fuori" mostrando l'avviso Permission denied (publickey)
. In tal caso, significa che non possiamo accedere tramite username e password perché il server è configurato di modo da consentire l'accesso solo a chi possieda una particolare chiave (ne parleremo in seguito). Così fosse, passiamo direttamente a quest'altro approfondimento:
» Leggi: [guida] Come creare una chiave SSH da PC Windows, Linux, Mac e accedere ai server senza password
Nella maggior parte dei casi, invece, ci verrà chiesto proprio di digitare la password associata al nome utente che abbiamo specificato sulla linea di comando quando ci siamo connessi tramite ssh nomeUtente@...
. Digitiamo allora tale password, senza preoccuparci del fatto che il terminale non mostri nulla mentre premiamo le lettere (è normale che sia così). Al termine, premiamo Invio
Attenzione! Anche qui, notiamo che la password è quella associata all'account sul server remoto. Non c'entra assolutamente niente con quella locale, utilizzata per accedere al PC!
Se username e password corrispondono, avremo accesso al server. Il sistema remoto mostra un messaggio di benvenuto e alcune informazioni sul sistema operativo, poi ci offre il prompt per digitare i comandi
Complimenti, siamo "dentro"!
Guida SSH, Passo 6: Lavorare in SSH
A questo punto possiamo impartire comandi al server remoto. Fra i principali, ricordiamo:
ls -la
: mostra la lista di file e cartellepwd
: mostra il percorso della cartella nella quale ci troviamocd /var/log/
: entra nella cartella indicatacd $HOME
: torna alla cartella personale ("home")mkdir MiaNuovaCartella
: crea una cartellasudo -s
: ottiene i privilegi di amministratore (root)nano /percorso/file.txt
: apre il file nell'editor di testocp /var/log/nginx/access.log $HOME/
: copia il file specificato nella seconda cartellamv $HOME/note.txt $HOME/appunti.txt
: sposta o rinomina un filebash $HOME/script/mioscript.sh
: esegue lo script specificatoexit
(oppureCtrl+D
da tastiera): chiude la connessione sistema remoto
Segnalo inoltre i seguenti approfondimenti:
- modificare i file di testo: guida a nano
- zippare file e cartelle: guida al comando zip
- 7-zippare file e cartelle: guida al comando 7z
- installare gli aggiornamenti: script zzupdate
- installare un server web: guida ad Apache/Nginx, PHP, MySQL
Per la lista completa di guide e tutorial:
» Guarda: tag "Linea di comando"
Guida SSH, Passo 7: Accedere tramite una "chiave SSH"
Oltre all'autenticazione tramite nome utente e password, SSH supporta l'uso di una chiave asimmetrica: adottando questa modalità, l'utente non deve più digitare la propria password come visto al Passo precedente, ma si identifica tramite un file segreto che contiene una chiave crittografica. Abbiamo visto come configurare tutto in quest'altro approfondimento dedicato:
» Leggi: [guida] Come creare una chiave SSH e accedere ai server senza password da PC Windows, Linux, Mac
Guida SSH, Passo 8: Trasferire i file via SSH
Oltre ad impartire comandi, SSH può essere sfruttato anche per copiare file dal PC locale al server remoto, e viceversa. Allo scopo, si utilizza il comando scp
, che poggia su SSH per trasferire tutto in modo crittografato e sicuro. Per la guida completa, si rimanda a questi approfondimenti:
- da PC Windows: guida SCP con Windows
- da PC Linux: guida SCP con Linux
Guida SSH, Passo 9: Creare un tunnel SSH
Un altro uso avanzato di SSH prevede la creazione di un cosiddetto tunnel SSH: una connessione sicura fra PC locale e server remoto all'interno della quale è possibile scambiare dati in modo crittografato e, quindi, anche superare i blocchi eventualmente attivati dagli amministratori di sistema
» Leggi: Come fare un tunnel SSH da Windows 10
Guida SSH, Passo 10: Più veloci, con la "rubrica" di sshconfig
Il funzionamento base di SSH è molto semplice: ssh nomeUtente@server.com
. Ma quando iniziamo ad aggiungere parametri e svolgere configurazioni avanzate rischiamo rapidamente di trovarci a digitare dei "mostri" come ssh -i /home/zane/ssh/chiave2 -R 8080:127.0.0.1:8080 root@server.com
ogni volta che vogliamo connetterci. Ebbene: il file sshconfig
è fatto apposta per semplificare la vita e riportare tutto ad un più pratico comando ssh server
. Vediamo come utilizzarlo in questo approfondimento:
» Leggi: [guida] Semplificare la connessione SSH con tunnel, proxy e chiavi diverse: guida a sshconfig
Guida SSH, Passo 11: Consentire l'accesso ad un altro utente
Seguendo la procedura appena descritta, siamo riusciti a collegarci al server. Ma... come fare per consentire ad un'altra persona di collegarsi anch'essa in SSH? In realtà, la procedura è davvero molto semplice. Basta creare un account utente per il collega tramite il comando:
sudo useradd nomeUtenteCollega
» Leggi anche: Linux/Ubuntu: come creare un account utente da linea di comando - guida rapida a useradd e adduser
La procedura guidata ci chiederà di scegliere una password: comunichiamola insieme al nomeUtenteCollega
che abbiamo scelto ed anche il nostro collaboratore potrà accedere al server seguendo la stessa procedura descritta in apertura.
Conclusioni
In questa guida abbiamo visto come usare SSH. L'utilizzo di base del comando è davvero molto semplice e consente di prendere il controllo di un sistema attraverso la rete, anche quando ci si trova a migliaia di chilometri di distanza.
Padroneggiando però anche scp e tunneling, SSH si rivela uno strumento prezioso in molteplici circostanze, classificandosi a tutti gli effetti come una delle competenze di base che ogni smanettone, studente o professionista del campo IT dovrebbe possedere.