Cos'è SSH e come si usa per collegarsi a un server
Come funziona SSH, come ci si collega a un server, i comandi essenziali, il trasferimento file e gli errori più comuni di chi inizia.
Se hai un server — un VPS, una macchina in cloud, un Raspberry Pi in salotto — SSH è il modo in cui ci parli. Non c'è schermo, non c'è mouse: c'è un terminale sulla tua macchina che esegue comandi su quella remota, come se fossi seduto davanti. In questo articolo trovi come funziona e come usarlo senza incidenti.
Cos'è
SSH (Secure Shell) è un protocollo che permette di eseguire comandi su una macchina remota attraverso un canale cifrato. Tutto ciò che scrivi e ricevi viaggia protetto.
È il successore di protocolli più vecchi che trasmettevano tutto in chiaro — password comprese — ed è il motivo per cui quelli non si usano più. Lo stesso ragionamento che faccio per FTP e SFTP.
Come ci si collega
ssh utente@indirizzo
ssh root@192.168.1.10
ssh edoardo@server.esempio.it -p 2222 # porta diversa dalla 22
La prima volta ricevi un avviso:
The authenticity of host '...' can't be established.
ED25519 key fingerprint is SHA256:...
Are you sure you want to continue connecting?
Non è un errore. SSH ti sta dicendo che non ha mai visto questo server e ti chiede di confermarne l'identità. Accettando, l'impronta viene salvata localmente.
Se in futuro quell'impronta cambia, SSH rifiuterà la connessione con un avviso allarmante. Quasi sempre è perché il server è stato reinstallato — ma è anche il meccanismo che segnala un tentativo di intercettazione, quindi vale la pena verificare invece di cancellare l'avviso per abitudine.
Per uscire: exit oppure Ctrl+D.
Le chiavi al posto della password
È la cosa più importante da configurare, ed è anche più comoda.
Con le chiavi ti colleghi senza digitare nulla, e la sicurezza è incomparabilmente superiore: una password si indovina con tentativi ripetuti, una chiave no.
In breve:
ssh-keygen -t ed25519 -C "la-tua-email" # genera la coppia
ssh-copy-id utente@server # installa la pubblica sul server
Da lì in poi ssh utente@server entra direttamente.
Il funzionamento e la gestione meritano spazio proprio: sono in SSH e chiavi: guida completa.
Il file di configurazione
Questa è la comodità che quasi nessuno configura e che cambia la giornata.
In ~/.ssh/config:
Host mioserver
HostName 192.168.1.10
User edoardo
Port 2222
IdentityFile ~/.ssh/id_ed25519
Da quel momento basta:
ssh mioserver
Niente più indirizzi IP da ricordare, utenti da specificare, porte da digitare. E funziona anche con gli altri comandi che usano SSH, come la copia di file.
Trasferire file
scp file.txt utente@server:/percorso/ # locale → remoto
scp utente@server:/percorso/file.txt . # remoto → locale
scp -r cartella/ utente@server:/percorso/ # ricorsivo
rsync -avz cartella/ utente@server:/percorso/ # sincronizza
rsync è nettamente migliore di scp per qualunque cosa non sia un file singolo: trasferisce solo le differenze, riprende da dove si era interrotto, e mostra l'avanzamento. Su una cartella di progetto la differenza di tempo è enorme.
Attenzione alla barra finale in rsync: cartella/ copia il contenuto, cartella copia la cartella stessa. È la fonte di confusione più comune.
Eseguire comandi senza entrare
ssh utente@server "df -h" # un comando e basta
ssh utente@server "systemctl restart nginx"
Utile negli script: non entri, esegui, esci. È anche il meccanismo dietro molti sistemi di deploy automatico.
Il tunnel SSH
Una funzione poco conosciuta e molto utile.
ssh -L 8080:localhost:80 utente@server
Questo rende il servizio in ascolto sulla porta 80 del server raggiungibile sulla porta 8080 della tua macchina.
Il caso d'uso concreto: un database o un pannello di amministrazione che gira sul server e non è esposto su internet — giustamente. Con un tunnel ci accedi dal tuo browser passando dal canale cifrato, senza aprire porte al mondo.
È il modo corretto di raggiungere servizi interni, molto meglio che esporli pubblicamente.
Restare connessi
Due fastidi comuni e i loro rimedi.
La connessione cade per inattività. Nel file di configurazione:
Host *
ServerAliveInterval 60
Un comando lungo si interrompe se cade la connessione. La soluzione è un multiplexer di terminale — tmux o screen: la sessione continua sul server anche se ti disconnetti, e la ritrovi rientrando.
tmux # avvia
# Ctrl+B poi D per staccarsi
tmux attach # rientra
Per qualunque operazione che duri più di qualche minuto su un server, è la cosa giusta da fare. Un aggiornamento di sistema interrotto a metà da una connessione caduta è un problema serio.
Gli errori più comuni
"Permission denied (publickey)" — il server accetta solo chiavi e la tua non è installata, oppure stai usando l'utente sbagliato.
"Connection refused" — non c'è nessun servizio SSH in ascolto su quella porta: servizio spento, porta diversa, o firewall.
"Connection timed out" — il pacchetto non arriva: indirizzo sbagliato, firewall che scarta, macchina spenta.
"Host key verification failed" — l'impronta del server è cambiata. Verifica il perché prima di rimuoverla.
"WARNING: UNPROTECTED PRIVATE KEY FILE" — la tua chiave privata ha permessi troppo aperti. Va a 600, come spiego in permessi dei file Linux.
La sicurezza del server
Se gestisci tu la macchina, quattro accorgimenti che cambiano sostanzialmente la superficie di rischio:
Disattiva l'accesso con password, una volta configurate le chiavi. Elimina in un colpo l'intera categoria degli attacchi a tentativi ripetuti.
Disattiva l'accesso diretto come root. Si entra con un utente normale e si usa sudo.
Cambia la porta predefinita. Non è vera sicurezza — chi cerca davvero la trova — ma riduce drasticamente il rumore dei tentativi automatici nei log.
Installa uno strumento di blocco automatico che banna gli indirizzi dopo troppi tentativi falliti.
Il quadro più ampio è in come rendere un sito sicuro.
In sintesi
SSH esegue comandi su una macchina remota attraverso un canale cifrato. Ci si collega con ssh utente@indirizzo, e la prima volta si conferma l'identità del server.
Le due cose da configurare subito: le chiavi al posto della password — più sicure e più comode — e il file di configurazione, che trasforma indirizzi IP e porte in nomi brevi.
Per i file, rsync batte scp su qualunque cosa non sia un singolo file. Per le operazioni lunghe, tmux evita che una connessione caduta interrompa tutto.
E la funzione che quasi nessuno usa e che risolve un problema reale: il tunnel SSH, per raggiungere servizi interni al server senza esporli su internet.