Tutorial > Come configurare l'accesso SSH tramite chiavi su CentOS 8

Come configurare l'accesso SSH tramite chiavi su CentOS 8

Pubblicato il: 22 giugno 2020

CentOS Sicurezza SSH

Introduzione

Il servizio SSH rappresenta il principale punto di accesso al tuo Cloud Server e allo stesso tempo uno dei protocolli che può trovarsi maggiormente sotto attacco rispetto ad altri.

Proprio per migliorare la sicurezza di SSH, è consigliabile configurare una tipologia di accesso criptato basato sull'utilizzo di chiavi RSA, quale alternativa al login basato su password. In questo tipo di autenticazione il client genera una chiave privata e la relativa chiave pubblica, che viene installata sulla macchina server, in modo da autenticare il client in maniera univoca.

In questo tutorial vedrai come impostare le chiavi SSH sul tuo server Linux CentOS 8. Al termine della guida sarai in grado di autenticarti sul tuo server mediante l'utilizzo di chiavi cifrate, senza dover più ricorrere ogni volta all'inserimento della password.

Generazione della coppia di chiavi

La prima cosa da dover fare è generare la coppia di chiavi sulla macchina Client, ipotizzando che in questo caso il Client sia il tuo PC locale.

Digita quindi il seguente comando sul terminale della tua macchina per creare una coppia di chiavi a 2048-bit RSA: 

ssh-keygen

Questa tipologia di chiavi è sufficientemente sicura per la maggior parte degli utenti. Qualora volessi optare per un maggior livello di sicurezza, puoi generare chiavi RSA a 4096-bit aggiungendo il flag -b alla fine del comando.

Dopo aver premuto il tasto Invio ti verrà chiesto dove salvare la coppia di chiavi. Qualora non avessi particolari necessità di salvare le chiavi altrove, conferma premendo Invio, altrimenti ti basterà digitare il nuovo percorso per il file id_rsa.

Generazione chiavi

N.B. Se in passato hai già generato una coppia di chiavi potresti ricevere un messaggio di alert che ti chiederà se sovrascrivere i file già esistenti. Presta attenzione in tal caso perchè l’operazione è irreversibile e qualora le sovrascrivessi non saresti più in grado di recuperare le vecchie chiavi.

Dopo aver scelto il percorso in cui salvare i tuoi file, ti verrà chiesto di specificare una passphrase opzionale, tramite la quale puoi aumentare ulteriormente il livello di sicurezza per le tue chiavi. Digita quindi una password e successivamente premi Invio.

Se la procedure di generazione delle chiavi è avvenuta correttamente, l’output che visualizzerai dovrebbe essere simile a quello mostrato nella seguente figura.

Generazione chiavi ultimata

Al termine di questa operazione, ssh-keygen salverà due file nei percorsi indicati:

  • id_rsa: la chiave privata del client, da non condividere con nessuno.
  • id_rsa.pub: la chiave pubblica, distribuibile tranquillamente.

A questo punto sei in possesso delle due chiavi. Ora bisogna comunicare al Server la chiave pubblica affinché possa creare il sistema di autenticazione.

Copia della chiave pubblica sul Server

A questo punto devi installare la chiave pubblica sul tuo server. Il modo più rapido per poter inviare la propria chiave pubblica al Server è sicuramente tramite ssh-copy-id, un semplice ma efficace strumento preinstallato su molti sistemi operativi.

Qualora non dovessi esserne in possesso, puoi comunque copiare la chiave tramite accesso diretto via SSH o copiare manualmente il file sul Server. Questi 3 metodi vengono descritti nei paragrafi successivi.

Copia tramite ssh-copy-id

Per utilizzare questo strumento hai bisogno di specificare l’host remoto al quale vuoi inviare la tua chiave pubblica. Naturalmente per effettuare questa operazione devi essere comunque in possesso dei dati di login per connetterti al Server. Digita quindi:

ssh-copy-id user@remote_host

N.B. Sostituisci “user” con il nome utente tramite il quale puoi accedere al Server e “remote_host” con l’IP pubblico del Server (o del dominio che lo punta).

Qualora fosse la prima volta che ti colleghi all'host remoto, ti verrà mostrato un messaggio di avvertimento nel quale il tuo Client ti comunica che non riconosce il Server.

Avviso prima connessione

Digita quindi “yes” e premi Invio.

Ti verrà quindi richiesto di inserire la password dell’utente specificato in precedenza per l’accesso al server. Al termine di questa operazione, dovresti ottenere un output simile al seguente.

Copia Ultimata

Dopo aver specificato la password, lo strumento ssh-copy-id tenterà di connettersi con le credenziali specificate e, in caso di successo, copierà il contenuto della chiave “~/.ssh/id_rsa.pub” all’interno del file “~/.ssh/authorized_keys” presente sull’host remoto.

Copia tramite SSH

Qualora lo strumento ssh-copy-id non fosse preinstallato sul tuo sistema, ma avessi comunque modo di accedere al tuo Server via SSH, puoi leggere il contenuto del file ~/.ssh utilizzando cat e copiarlo direttamente all’interno del file ~/.ssh/authorized_keys

In tal caso il comando da dover digitare è il seguente:

cat ~/.ssh/id_rsa.pub | ssh user@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

N.B. Sostituisci “user” con il nome utente tramite il quale accedere al Server e “remote_host” con l’IP pubblico del Server (o del dominio che lo punta).

In questo modo stai aggiungendo la tua chiave pubblica al file “~/.ssh/authorized_keys” senza sovrascriverne il contenuto.

Anche in questo caso ti verrà chiesto di inserire la password per l’utente “user” tramite il quale si stia cercando di effettuare il login al Server remoto.

Copia manuale

Qualora non potessi far accesso al Server mediante i metodi precedentemente elencati, puoi comunque aggiungere manualmente la chiave pubblica al tuo Server.

La prima cosa da fare è visualizzare il contenuto del file “~/.ssh/id_rsa.pub”, operazione possibile sempre tramite cat. Recati quindi all’interno della cartella nella quale hai generato le chiavi: se non hai specificato un percorso diverso, quello di default è /home/your_username/.ssh/.

cd /home/your_username/.ssh/

N.B. sostituisci “your_username” con il nome dell’utente tramite il quale hai fatto il login sulla tua macchina Client.

Digita quindi il seguente comando:

cat id_rsa.pub

Dovresti ottenere un output molto simile a quello mostrato nella figura sottostante.

Chiave pubblica

Connettiti quindi al tuo Server via SSH, utilizzando sempre il seguente comando:

ssh user@remote_host

N.B. Allo stesso modo sostituisci “user” con il nome utente tramite il quale accedere al Server e “remote_host” con l’indirizzo IP del Server.

Assicurati che esista la cartella “~/.ssh“, digitando:

mkdir -p ~/.ssh

Questo comando creerà la cartella, qualora non dovesse esistere. Nel caso in cui invece dovesse già essere presente, non sortirà alcun effetto.

A questo punto devi copiare tutto l’output ottenuto con il comando cat id_rsa.pub all’interno del file authorized_keys. Il comando successivo creerà il file, qualora non esistesse. Qualora invece dovesse essere già presente, aggiungerà al contenuto del file il parametro passato.

echo public_key >> ~/.ssh/authorized_keys

N.B. Sostituisci “public_key” con l’output ottenuto mediante il comando cat id_rsa.pub.

Nella figura sottostante si può vedere come sia stata effettuata una connessione SSH dal client al server e come sia stata copiata manualmente la chiave.

Copia manuale via SSH

Assicurati infine che il file authorized_keys abbia i giusti permessi. Digita quindi:.

chmod -R go= ~/.ssh

Se stai utilizzando l’account root, devi anche specificare quali utenti possano far accesso alla cartella “.ssh”. Digita quindi:

chown -R user:user ~/.ssh

N.B. Sostituisci quindi il parametro “user” con il nome dell’utente autorizzato.

Accesso al Server tramite chiavi SSH

Se hai completato con successo la copia della chiave pubblica, indipendentemente dalla metodologia scelta, da questo momento non sarà più necessario specificare la password quando ti collegherai in SSH dal tuo Client al Server.

Puoi provare infatti a collegarti via SSH al tuo Server mediante il comando:

ssh user@remote_host

N.B. Sostituisci sempre il parametro “user” con il nome dell’utente abilitato a connettersi in SSH e “remote_host” con l’IP del Server (o dominio che lo punta).

Noterai che, diversamente da prima, non avrai necessità di specificare la password per l’accesso. Al massimo, se inserita in fase di generazione delle chiavi, ti sarà richiesto di indicare la passphrase.

Accesso SSH

Disabilitazione del login basato su password

Arrivato a questo punto, sei riuscito ad accedere al tuo Server senza dover specificare la password per il login. Tuttavia è ancora possibile accedere al Server nella modalità che prevede l’inserimento di nome utente e password.

Questo espone comunque il Server a eventuali attacchi esterni di brute force. É buona norma quindi disabilitare completamente questa tipologia o di autenticazione, affinché solamente gli utenti autorizzati possano tentare il login.

Per farlo, entra nel Server come root (o utente con privilegi di amministrazione) e apri il file “/etc/ssh/sshd_config”.

sudo vi /etc/ssh/sshd_config

All’interno del file devi cercare il parametro PasswordAuthentication e impostarne il valore “no”. Digita quindi i per entrare in modalità di modifica di Vim e decommenta (cancellando il simbolo “#”) la riga.

Rimozione richiesta password

Una volta modificato quel parametro, premi ESC e poi digita “:wq” per uscire e salvare le modifiche. Per rendere le modifiche effettive, riavvia il servizio sshd:

sudo systemctl restart sshd

Conclusioni

A questo punto hai configurato correttamente il tuo server Linux CentOS 8 con un sistema di autenticazione basato su chiavi cifrate.

Da questo momento solamente i client correttamente configurati potranno connettersi al tuo Server tramite l’utilizzo delle chiavi, e non dovrai più autenticarti ogni volta tramite l'utilizzo della password.