SSH è un protocollo di livello applicativo comunemente utilizzato per l’accesso remoto. In questo articolo esamineremo l’uso del protocollo SSH per connettersi a server Linux remoti e configurare impostazioni specifiche per migliorare la sicurezza.
SSH può essere utilizzato con qualsiasi distribuzione Linux, poiché è abilitato di default nella maggior parte delle moderne distribuzioni Unix e Linux.
In questa guida, tutti i test sono stati eseguiti su Ubuntu 22.04; tuttavia, le stesse istruzioni possono essere applicate anche ad altre distribuzioni come Debian, CentOS, ecc.
È possibile utilizzare diversi programmi client per connettersi a server Linux tramite SSH. Alcuni dei più diffusi sono:
Windows: PuTTY, Bitvise SSH Client, SuperPuTTY, mRemoteNG, MobaXterm
macOS: Termius o l’utilità SSH integrata nel Terminale
Windows (Windows 10, Windows 11, Windows Server 2019): il client OpenSSH integrato, accessibile tramite riga di comando (cmd) o PowerShell
La sintassi standard del comando SSH è la seguente:
ssh <utente@IP_o_dominio>
Ad esempio:
ssh alex@166.1.227.189
Per impostazione predefinita, SSH si connette tramite la porta 22. Se il server utilizza una porta diversa, è possibile specificarla con l’opzione -p:
ssh alex@166.1.227.189 -p 2222
Il file di configurazione del server SSH si chiama sshd_config e si trova nella directory /etc/ssh. Da non confondere con il file del client SSH, ssh_config. In questo articolo ci concentreremo esclusivamente sul file lato server.
Per impostazione predefinita, le connessioni SSH utilizzano l’autenticazione tramite password, a meno che non sia stata aggiunta una chiave SSH durante la creazione del server (le chiavi SSH verranno trattate nella sezione successiva). Nella maggior parte delle distribuzioni Linux/Unix, la configurazione del server include l’autenticazione PAM, che consente agli utenti con account di sistema di accedere utilizzando nome utente e password.
Per accedere tramite password, sono necessari l’indirizzo del server remoto e le credenziali dell’utente, ad esempio:
ssh alex@166.1.227.189
Dopo aver eseguito il comando, verrà richiesta la password. Se è corretta, si otterrà l’accesso al server.
Alla prima connessione, verrà visualizzato un messaggio relativo all’“impronta digitale” (fingerprint) del server. Digitare yes per procedere.
Sebbene l’autenticazione tramite password funzioni, non è il metodo più sicuro, poiché le password possono essere indovinate. Un’alternativa più sicura è l’utilizzo delle chiavi SSH, descritto nella sezione successiva.
Le chiavi SSH rappresentano un metodo di autenticazione più sicuro e comunemente utilizzato rispetto alle password. SSH utilizza due tipi di chiavi:
Chiave pubblica: utilizzata per la crittografia e condivisibile pubblicamente
Chiave privata: utilizzata per la decrittografia e da mantenere privata
Per generare le chiavi SSH, utilizzare il comando:
ssh-keygen
Il comando richiederà di scegliere una directory in cui salvare le chiavi. Per impostazione predefinita, vengono memorizzate nella directory .ssh della home dell’utente, ad esempio /home/alex/.ssh. Premere Invio per utilizzare il percorso predefinito.
Successivamente, verrà richiesto di creare una passphrase per aumentare la sicurezza. Se si preferisce non utilizzare una passphrase, premere Invio quando richiesto.
Una volta generate, la chiave privata (id_rsa) e la chiave pubblica (id_rsa.pub) verranno salvate nella directory .ssh.
Prima di connettersi a un host remoto, copiare la chiave pubblica su tale host utilizzando il comando ssh-copy-id:
ssh-copy-id -i /home/alex/.ssh/id_rsa.pub alex@166.1.227.189
Verrà richiesta la password dell’utente remoto una sola volta. Dopodiché, la chiave pubblica verrà aggiunta all’host remoto, consentendo l’accesso senza password:
ssh alex@166.1.227.189
Se non viene richiesta alcuna password, l’autenticazione basata su chiave funziona correttamente.
Poiché le password non sono sicure, si consiglia di disabilitare l’autenticazione tramite password e utilizzare esclusivamente l’accesso basato su chiavi. Per farlo, modificare il file di configurazione del server SSH:
nano /etc/ssh/sshd_config
Individuare la riga PasswordAuthentication e impostarla su no:
PasswordAuthentication no
Salvare le modifiche e riavviare il server SSH:
systemctl restart ssh
Importante: prima di disabilitare l’autenticazione tramite password, assicurarsi che l’autenticazione basata su chiavi funzioni correttamente. In caso contrario, si rischia di perdere l’accesso al server. Se ciò accade, è possibile ripristinare l’autenticazione tramite password tramite la console web del server.
Per impostazione predefinita, il server SSH utilizza la porta 22. È possibile modificarla editando il file sshd_config. Individuare la riga Port, rimuovere il simbolo # e specificare una nuova porta (compresa tra 1024 e 65535):
Port 2224
Dopo aver salvato le modifiche, riavviare il server SSH:
systemctl restart ssh
Per connettersi al server utilizzando la nuova porta, usare l’opzione -p:
ssh alex@166.1.227.189 -p 2224
In alcune distribuzioni, l’accesso dell’utente root è consentito di default. Poiché l’utente root dispone di privilegi completi sul sistema, è più sicuro disabilitare questo tipo di accesso. Individuare la riga PermitRootLogin nel file sshd_config e impostarla su no:
PermitRootLogin no
Salvare il file e riavviare il server SSH:
systemctl restart ssh
È possibile limitare l’accesso SSH a determinati utenti modificando il file sshd_config con i seguenti parametri:
AllowUsers: specifica quali utenti sono autorizzati a connettersi tramite SSH. Esempio:
AllowUsers test admin
DenyUsers: specifica gli utenti ai quali viene negato l’accesso SSH. Esempio:
DenyUsers nginx websrv
Per applicare le modifiche, riavviare il server SSH:
systemctl restart ssh
SSH è uno strumento indispensabile per la connessione a server remoti. Oltre alla crittografia integrata, è possibile aumentare ulteriormente la sicurezza del server SSH configurandolo correttamente, ad esempio disabilitando l’autenticazione tramite password e limitando l’accesso a utenti specifici.