Introduzione
Uno strumento fondamentale che ogni amministratore di sistemi dovrebbe conoscere è SSH. Secure Shell è un protocollo utilizzato per accedere in modo sicuro a sistemi remoti. Si può considerare il metodo più diffuso per accedere a un server Linux da remoto.
In questa guida vedremo come utilizzare SSH per effettuare la connessione a un sistema remoto.
Prerequisiti
Per effettuare la connessione a un sistema remoto tramite SSH, è necessario utilizzare il comando ssh
.
Se stai utilizzando Windows, dovrai installare una versione di OpenSSH per poter utilizzare ssh
dal terminale di sistema. Utilizzando invece la PowerShell, puoi seguire la documentazione di Microsoft per aggiungere OpenSSH alla PowerShell.
Se invece preferisci avere un ambiente Linux completo, puoi installare il Windows Subsystem for Linux (WSL), che include anche ssh
di default.
Infine, un'altra opzione è quella di installare Git per Windows, che fornisce un terminale bash per Windows che include il comando ssh
.
Se invece stai utilizzando Mac o Linux, il comando ssh
sarà già disponibile di default.
Sintassi di base
La forma più semplice e intuitiva del comando è la seguente:
ssh host_remoto
In questo esempio host_remoto rappresenta l'indirizzo IP o il dominio del server a cui stiamo cercando di connetterci.
Questo comando da per scontato che il nome utente del sistema remoto corrisponda al nome utente del tuo sistema locale.
Se il nome utente è diverso, puoi specificarlo con la seguente sintassi:
ssh username_remoto@host_remoto
Una volta aver effettuato la connessione al server, potrebbe essere necessario verificare la propria identità fornendo una password. Più tardi vedremo come generare delle chiavi da utilizzare al posto delle password.
Per uscire dalla sessione ssh e tornare nella nostra shell locale possiamo utilizzare:
exit
Come funziona SSH?
SSH funziona effettuando una connessione da un client a un server ssh, chiamanto sshd
.
Nella sezione precedente, ssh
rappresentava il programma client. Il server ssh era già in esecuzione sull'host remoto che abbiamo specificato.
Su quasi tutti gli ambienti Linux, il server sshd
dovrebbe avviarsi automaticamente. Se per qualche motivo non è in esecuzione, potrebbe essere necessario accedere al server attraverso una console web oppure una console seriale da locale.
Il procedimento necessario per avviare un server ssh varia in base alla distribuzione di Linux in utilizzo. Su Ubuntu puoi avviare il server scrivendo:
sudo systemctl start ssh
Questo dovrebbe avviare il server sshd e diventerà possibile accedere da remoto.
Come Configurare SSH
Quando si va a cambiare la configurazione di SSH, è necessario agire sulle impostazioni del server sshd.
Su Ubuntu, il file di configurazione principale di sshd è raggiungibile al percorso /etc/ssh/sshd_config
.
Prima di eseguire qualsiasi operazione, è fortemente consigliato fare un backup della configurazione attuale utilizzando:
sudo cp /etc/ssh/sshd_confi{,.bak}
Ora possiamo aprire il file utilizzando nano o un qualsiasi altro editor di testo:
sudo nano /etc/ssh/sshd_config
La maggior parte delle opzioni non sono da modificare. Tuttavia, ci sono alcuni parametri che potrebbe essere utile cambiare:
Port 22
La configurazione della porta indica su che porta il server sshd attenderà nuove connessioni. Di default è impostata a 22. Questo parametro dovrebbe essere lasciato così, a meno che non ci siano motivazioni specifici per modificarlo. Se decidi di cambiare la porta, poi vedremo come connetterci alla nuova porta.
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
Le chiavi degli host (Host Key) servono a indicare dove trovare le chiavi globali degli host. Vedremo più avanti nella guida cosa sono le host key.
SyslogFacility AUTH
LogLevel INFO
Queste due righe indicano la quantità di log che dovrebbero essere salvati. Se stai incontrando dei problemi con SSH, una buona idea potrebbe essere quella di aumentare i log, in modo da poter trovare la fonte del problema.
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
Questi parametri definiscono alcune impostazioni sul login:
LoginGraceTime
specifica per quanti secondi mantenere la connessione aperta senza che sia avvenuto un login con successo. Puoi impostare questo valore a un numero di secondi leggermente più alto del tempo che impieghi solitamente per accedere.PermitRootLogin
definisce se consentire all'utente root di accedere o meno. Nella maggior parte dei casi questo valore andrebbe impostato ano
quando hai creato un account che ha accesso ai privilegi attraversosudo
.StrictMode
è un sistema di sicurezza che ignora tutti i login nel caso i file di autenticazione siano leggibili da tutti. Questo previene tentativi di accesso con file di configurazione non sicuri.
X11Forwarding yes
X11DisplayOffset 10
Con queste impostazioni è possibile configurare l'X11 Forwading. Questo consente di visualizzare l'interfaccia grafica (GUI) di un sistema remoto dal tuo sistema locale.
Questa opzione deve essere abilitata sul server ed essere passata con il client SSH durante la connessione utilizzando il parametro -X
.
Una volta aver terminato i cambiamenti, possiamo salvare le modifiche e chiudere il file. Se stai utilizzando nano
premi Ctrl + X
, quando richiesto premi Y
e infine Invio
.
Se hai effettuato delle modifiche al file di configurazione, ricordati di ricaricare il server sshd per rendere i cambiamenti effettivi:
sudo systemctl reload ssh
Dopo aver ricaricato il file, i cambiamenti dovrebbero essere entrati in funzione correttamente.
Nota: è consigliabile mantenere alcune sessioni ssh aperte mentre si effettuano i cambiamenti. In questo modo, se qualcosa va storto ed è necessario tornare alla configurazione precedente, non ci si ritroverà chiusi fuori dal proprio server.
Come fare il Login con le Chiavi SSH
Accedere ad un server remoto con un username e una password è sicuramente un sistema semplice ed efficace, tuttavia è più veloce e sicuro utilizzare un sistema di autenticazione basato su chiavi.
Come funziona l'Autenticazione con le Chiavi?
Un sistema di autenticazione basato su chiavi funziona creando un paio di chiavi: una chiave pubblica e una chiave privata.
La chiave privata è memorizzata sul client e mantenuta al sicuro, non rendendola disponibile a nessuno.
La chiave pubblica invece può essere condivisa con chiunque o memorizzata su un server a cui desideri effettuare l'accesso.
Quando provi ad effettuare una connessione utilizzando le chiavi, il server utilizzerà la chiave pubblica per creare un messaggio destinato al tuo computer che potrà essere letto solamente con la chiave privata.
Il client invierà al server la risposta corretta, facendo così sapere al server di essere in possesso della giusta chiave per accedere.
Questo processo viene svolto in maniera completamente automatizzata dopo che avrai generato le tue chiavi.
Come generare le Chiavi SSH
Le Chiavi SSH dovrebbero essere generate dal computer con cui desideri accedere al server, solitamente la propria macchina.
Apri il tuo terminale ed esegui il seguente comando:
ssh-keygen -t rsa
Ti potrebbe essere chiesto di impostare una password sul file della chiave stesso, tuttavia questa è una pratica estremamente rara, si consiglia di procedere premendo Invio durante tutta la procedura per confermare le impostazioni predefinite. Le tue chiavi verranno create al percorso ~/.ssh/id_rsa.pub e ~/.ssh/id_rsa.
Ora naviga all'interno della directory .ssh
con il seguente comando:
cd ~/.ssh
E controlla poi il permesso dei file:
ls -l
-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys
-rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa
-rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub
Come si può vedere, il file id_rsa
è leggibile e scrivibile solamente dal proprietario, questo è utile per mantenere la chiave segreta.
Tuttavia, il file id_rsa.pub
può essere visualizzato e condiviso con chiunque, e i suoi permessi rispettano questa prerogativa.
Come trasferire la Chiave Pubblica al Server
Se attualmente utilizzi una password per accedere al server, puoi copiare la tua chiave pubblica sul server con il seguente comando:
ssh-copy-id host-remoto
Questo comando avvierà una sessione SSH che, dopo l'inserimento della password, copierà la tua chiave pubblica sul file del server contenente le chiavi autorizzate. La prossima volta potrai accedere al server senza password.
Le opzioni del Client
Ci sono varie opzioni che puoi fornire quando effettui una connessione con SSH. Alcune potrebbero essere necessarie per rispettare la configurazione del server sshd
, nel caso sia stata modificata.
Per esempio, se il numero della porta è stato cambiato nella configurazione del server sshd
, dovrai utilizzare la stessa porta anche sul client utilizzando il comando:
ssh -p numero-porta host-remoto
Nota: Utilizzare una porta modificata per l'SSH è un sistema per ottenere sicurezza tramite segretezza (security through obscurity). Essendo 22 la porta predefinita per le connessioni SSH, consentendo l'accesso proprio su questa porta, è molto probabile essere attaccati tramite tentativi di accesso automatizzati. Utilizzando invece l'autenticazione tramite Chiavi e impostando una porta diversa da quella standard non è la migliore soluzione possibile dal punto di vista della sicurezza, ma riduce al minimo gli attacchi.
Se vuoi eseguire solamente un comando sul server remoto, puoi specificarlo dopo aver inserito l'host, in questo modo:
ssh host-remoto comando-da-eseguire
Come detto in precedenza, se il forwarding X11 è abilitato su entrambe i computer, puoi accedere alle sue funzionalità in questo modo:
ssh -X host-remoto
Dando per scontato che siano presenti gli strumenti adeguati sul computer, i programmi GUI che utilizzi sul server remoto potranno aprire la loro finestra sul tuo computer locale.
Disabilitare l'autenticazione con Password
Se hai creato le chiavi SSH, puoi aumentare ulteriormente la sicurezza del tuo server disabilitando l'autenticazione tramite password. Così facendo l'unico sistema per accedere al server sarà attraverso la chiave privata sul tuo computer associata alla chiave pubblica installata sul server.
Attenzione: Prima di procedere assicurati che la chiave pubblica sia correttamente installata sul server, altrimenti rimarrai chiuso fuori!
Come utente root o con privilegi sudo, apri il file di configurazione sshd:
sudo nano /etc/ssh/sshd_config
Trova la riga che contiene Password Authentication
, rimuovi il commento cancellando il carattere #
all'inizio della riga e infine cambia il valore del parametro a no
, in questo modo:
PasswordAuthentication no
Sono presenti altri due parametri che non dovrebbero essere modificati per nessun motivo e lasciati con le loro impostazioni predefinite:
PubkeyAuthentication yes
ChallengeResponseAuthentication no
Una volta aver terminato le modifiche sarà possibile chiudere il file e ricaricare il demone SSH con il seguente comando:
sudo systemctl reload ssh
Terminata la procedura, l'autenticazione tramite password sarà stata disabilitata e potrai accedere solamente con le Chiavi SSH precedentemente configurate.
Conclusione
Il protocollo SSH è rimasto popolare perché sicuro, leggero e utile in moltissime situazioni e in questa guida abbiamo visto quali sono le funzioni di base più utili. Ovviamente ci sono molte altre cose che possono semplificare di molto la vita, ma vanno oltre lo scopo di questa guida di base.