SSH (Secure Shell): Cos’è e Come si Usa
Indice
- Cos’è SSH?
- Perché Usare SSH?
- Come Funziona SSH?
- Installazione di SSH
- Utilizzo di SSH: Connessione Base
- Configurazione Base di SSH
- Funzionalità Avanzate di SSH
- Sicurezza SSH: Best Practices
- Troubleshooting Comune
- Conclusione
1. Cos’è SSH?
SSH, acronimo di Secure Shell, è un protocollo di rete crittografato che permette di connettersi in modo sicuro a un computer remoto. Invece di inviare i dati in chiaro (come facevano protocolli più vecchi come Telnet), SSH cifra tutte le comunicazioni tra il tuo computer (il client) e il computer remoto (il server), proteggendo così password, file e altre informazioni sensibili.
2. Perché Usare SSH?
- Accesso Remoto Sicuro: Permette di gestire server e computer da remoto in modo sicuro.
- Protezione dei Dati: La crittografia previene intercettazioni e furti di dati.
- Tunneling (Port Forwarding): Crea connessioni sicure per altri servizi.
- Trasferimento File: Sposta file tra computer in modo protetto.
- Automatizzazione: Consente di eseguire comandi e script da remoto.
3. Come Funziona SSH?
SSH usa una combinazione di crittografia simmetrica e asimmetrica per proteggere la connessione.
- Handshake: Inizialmente, il client e il server si “stringono la mano” (handshake) usando la crittografia asimmetrica. Questo processo serve a scambiare in modo sicuro una chiave segreta che verrà usata per la crittografia simmetrica.
- Crittografia Simmetrica: Una volta stabilita la connessione, tutti i dati scambiati tra client e server sono crittografati usando la chiave simmetrica. Questo rende la comunicazione sicura e protetta da intercettazioni.
4. Installazione di SSH
Prima di poter usare SSH, è necessario che sia installato sia sul client che sul server a cui ti vuoi connettere.
4.1. Su Windows:
- Windows 10 e successivi hanno un client SSH integrato (OpenSSH). Puoi verificare che sia installato aprendo il Prompt dei comandi o PowerShell e digitando
ssh
. Se restituisce un messaggio di aiuto, il client è installato. Altrimenti, segui questi passaggi:- Vai su “Impostazioni” -> “App” -> “Funzionalità facoltative”.
- Clicca su “Aggiungi una funzionalità”.
- Cerca “Client OpenSSH” e installalo.
- Per installare un server SSH su Windows, segui questi passaggi:
- Segui gli stessi passaggi per le “Funzionalità facoltative” ma cerca “Server OpenSSH” e installalo.
- Avvia il servizio SSH aprendo PowerShell come amministratore ed eseguendo:
Start-Service sshd
- Per far avviare il servizio automaticamente all’avvio del sistema:
Set-Service -Name sshd -StartupType 'Automatic'
4.2. Su macOS/Linux:
- Il client e il server SSH sono generalmente preinstallati. Per verificarlo, apri il Terminale e digita
ssh
. Se ricevi un output simile a un aiuto, SSH è installato. - Per il server, su alcune distribuzioni Linux potrebbe essere necessario installare
openssh-server
:- Debian/Ubuntu:
sudo apt update && sudo apt install openssh-server
- Fedora/CentOS:
sudo dnf install openssh-server
- Debian/Ubuntu:
- Avvia il servizio con:
sudo systemctl start sshd
e abilita l’avvio automatico:
sudo systemctl enable sshd
5. Utilizzo di SSH: Connessione Base
5.1. Connessione con Password:
La forma più semplice (ma meno sicura) di connessione è tramite password:
ssh nomeutente@indirizzoserver
Sostituisci nomeutente
con il nome utente sull’host remoto e indirizzoserver
con l’indirizzo IP o il nome di dominio del server. Ti verrà richiesta la password dell’utente remoto.
5.2. Connessione con Chiavi SSH (Consigliato):
Le chiavi SSH sono il metodo più sicuro per autenticarsi. Invece di inserire la password a ogni connessione, si usano delle coppie di chiavi (una privata e una pubblica):
- Genera la Coppia di Chiavi:Sul tuo computer, apri il terminale e digita:
ssh-keygen -t rsa -b 4096
Ti verranno poste alcune domande (puoi premere invio per accettare i valori predefiniti). Verranno generate due chiavi:
id_rsa
(chiave privata, da tenere al sicuro) eid_rsa.pub
(chiave pubblica, da condividere). - Copia la Chiave Pubblica sul Server:Usa
ssh-copy-id
:ssh-copy-id nomeutente@indirizzoserver
Ti verrà richiesta la password del server una sola volta.
- Connetti al Server:Ora, prova a connetterti senza password:
ssh nomeutente@indirizzoserver
6. Configurazione Base di SSH
La configurazione del server SSH si trova nel file sshd_config
(solitamente in /etc/ssh/sshd_config
su Linux/macOS). Puoi modificarlo con un editor di testo con privilegi di amministratore.
6.1. Cambiare la Porta di Default:
La porta di default di SSH è la 22. Cambiarla a una porta non standard (es. 2222) può rendere un attacco più difficile:
Nel file /etc/ssh/sshd_config
cerca la riga Port 22
e cambiala in Port 2222
(o un’altra porta a tua scelta). Riavvia il servizio ssh sudo systemctl restart sshd
.
Per connetterti dovrai specificare la nuova porta con -p
:
ssh -p 2222 nomeutente@indirizzoserver
6.2. Disabilitare l’Accesso con Password:
Dopo aver configurato le chiavi SSH, è buona pratica disabilitare l’accesso con password per maggiore sicurezza. Nel file /etc/ssh/sshd_config
cerca e modifica la riga PasswordAuthentication yes
in PasswordAuthentication no
. Riavvia il servizio ssh sudo systemctl restart sshd
.
7. Funzionalità Avanzate di SSH
7.1. Port Forwarding (Tunneling):
Il port forwarding crea un tunnel sicuro attraverso la connessione SSH, consentendo di reindirizzare il traffico di rete. È utile per accedere a servizi che sono accessibili solo dall’interno della rete remota o per nascondere un servizio in un tunnel crittografato.
- Forwarding Locale (es. visualizzare una pagina web da remoto sul tuo browser):
ssh -L 8080:localhost:80 nomeutente@indirizzoserver
Questa comando connette la porta 8080 del tuo computer alla porta 80 del server remoto. Potrai quindi visualizzare la pagina web del server (se disponibile) aprendo il tuo browser all’indirizzo
localhost:8080
- Forwarding Remoto (es. connettere un servizio dal tuo computer al server remoto):
ssh -R 8080:localhost:3000 nomeutente@indirizzoserver
Questo comando crea un server in ascolto sulla porta 8080 del server remoto che inoltra le connessioni alla porta 3000 del tuo computer.
7.2. Trasferimento File con scp
:
scp
(Secure Copy) è uno strumento basato su SSH per trasferire file:
- Dal tuo computer al server:
scp nomefile nomeutente@indirizzoserver:/percorso/remoto
- Dal server al tuo computer:
scp nomeutente@indirizzoserver:/percorso/remoto/nomefile /percorso/locale
7.3. Esecuzione di Comandi Remoti:
Puoi eseguire un comando sul server remoto senza aprire una shell interattiva:
ssh nomeutente@indirizzoserver "comando da eseguire"
8. Sicurezza SSH: Best Practices
- Usa sempre le chiavi SSH invece delle password.
- Cambia la porta SSH di default.
- Disabilita l’accesso con password dopo aver configurato le chiavi.
- Aggiorna regolarmente il software SSH.
- Limita gli indirizzi IP che possono connettersi (con firewall).
- Controlla regolarmente i log SSH per attività sospette.
- Non memorizzare le chiavi private in posti non sicuri.
9. Troubleshooting Comune
- “Permission denied”: Controlla i permessi del file della chiave privata, il nome utente, l’indirizzo del server e se hai aggiunto la chiave pubblica al server.
- “Connection refused”: Il servizio SSH potrebbe non essere in esecuzione sul server, oppure il firewall blocca la porta SSH.
- Tempi di attesa lunghi: Verifica che non ci siano problemi di rete, prova a specificare l’indirizzo IP invece del nome a dominio.
10. Conclusione
SSH è uno strumento essenziale per amministratori di sistema, sviluppatori e chiunque abbia bisogno di accedere a computer remoti in modo sicuro. Con questa guida, hai appreso le basi e alcune delle funzionalità avanzate di SSH. Ricorda di applicare le best practice per mantenere la tua connessione sicura.