Introduzione

Le chiavi SSH sono una implementazione della crittografia a chiavi pubbliche. Esse risolvono il problema degli attacchi di tipo brute-force sulle password rendendoli impraticabili. Le chiavi SSH forniscono un modo semplice e sicuro di accedere al tuo server e sono consigliate per tutti gli utenti.

Creare una Copia di Chiavi RSA

Creare una copia di chiavi sul proprio computer, dal quale vi connetterete al server tramite SSH.

Da terminale dare il seguente comando:
ssh-keygen

Dovresti ricevere un messaggio di output simile al seguente:

Generating public/private rsa key pair.
Enter file in which to save the key (/tua_home/.ssh/id_rsa):

Premere Invio per salvare la coppia di chiavi nella cartella .ssh/, oppure specificare un percorso alternativo.

Se le chiavi erano già state generate, dovresti ricevere un messaggio di output simile al seguente:

/home/tua_home/.ssh/id_rsa already exists.
Overwrite (y/n)?

ATTENZIONE Se si sceglie di sovrascrivere la chiave su disco, non sarà più possibile effettuare l'autenticazione utilizzando la chiave precedente.

Successivamente, dovresti ricevere un messaggio di output simile al seguente:

Enter passphrase (empty for no passphrase):

Per una maggiore sicurezza è possibile inserire una passphrase sicura, che è altamente raccomandata. Una passphrase aggiunge un ulteriore livello di sicurezza per impedire agli utenti non autorizzati di effettuare l'accesso.

Successivamente, dovresti ricevere un messaggio di output simile al seguente:

Your identification has been saved in /tua_home/.ssh/id_rsa.
Your public key has been saved in /tua_home/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:3g8Vbc+Bb0Tb1Txb1Fh8dRQzehOkddxBqwVOdMnYC2g [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|            o+*^^|
|           Eo+X=^|
|          . .=+OB|
|             o*=o|
|        S   .. oo|
|       . . .  .  |
|        . o      |
|           o     |
|            .    |
+----[SHA256]-----+

Copiare la Chiave Pubblica sul Server Ubuntu

Il modo più rapido per copiare la tua chiave pubblica sull'host Ubuntu è utilizzare ssh-copy-id. Se non si dispone di ssh-copy-id sul computer client, è possibile utilizzare uno dei due metodi alternativi spiegati successivamente.

Per utilizzare ssh-copy-id, è sufficiente specificare l'host remoto a cui si desidera connettersi e l'account utente a cui si ha accesso tramite password SSH:
ssh-copy-id [email protected]_del_server_ubuntu

Potresti ricevere un messaggio di output simile al seguente:

The authenticity of host 'INDIRIZZO_IP (INDIRIZZO_IP)' can't be established.
ECDSA key fingerprint is SHA256:E3NlUzqo/QZm8PF1QD9grtkPm8NIzyp0wHfMZGB/t6M.
Are you sure you want to continue connecting (yes/no)? yes

Significa che il tuo computer locale non riconosce l'host remoto. Questo accadrà la prima volta che ti connetti a un nuovo host. Scrivi "yes" e premi INVIO per continuare.

Successivamente, l'utilità eseguirà la scansione del tuo account locale per la chiave id_rsa.pub che abbiamo creato in precedenza. Quando trova la chiave, ti chiederà la password dell'account dell'utente remoto.

Dovresti ricevere un messaggio di output simile al seguente:

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]_IP's password:

Scrivere la password e premere INVIO. Verranno copiati i contenuti della tua chiave ~/.ssh/id_rsa.pub in un file nella directory home ~/.ssh dell'account remoto denominata authorized_keys.

Dovresti ricevere un messaggio di output simile al seguente:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]_IP'"
and check to make sure that only the key(s) you wanted were added.

Copiare la Chiave Pubblica utilizzando l'SSH

Se non si dispone di ssh-copy-id, ma si dispone dell'accesso SSH basato su password a un account sul server, è possibile caricare le chiavi utilizzando un metodo SSH convenzionale.

Eseguire questo comando dal vostro computer locale, modificando utente e indirizzo IP del server Ubuntu al quale connettersi:
cat ~/.ssh/id_rsa.pub | ssh [email protected]_ip "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Potreste ricevere un messaggio di output simile al seguente:

The authenticity of host 'INDIRIZZO_IP (INDIRIZZO_IP)' can't be established.
ECDSA key fingerprint is SHA256:E3NlUzqo/QZm8PF1QD9grtkPm8NIzyp0wHfMZGB/t6M.
Are you sure you want to continue connecting (yes/no)? yes

Significa che il tuo computer locale non riconosce l'host remoto. Questo accadrà la prima volta che ti connetti a un nuovo host. Scrivi "yes" e premi INVIO per continuare.

Successivamente, l'utilità eseguirà la scansione del tuo account locale per la chiave id_rsa.pub che abbiamo creato in precedenza. Quando trova la chiave, ti chiederà la password dell'account dell'utente remoto.

Successivamente vi verrà chiesto di inserire la password dell'account:

[email protected]_IP's password:

Scrivere la password e premere INVIO. Verranno copiati i contenuti della tua chiave ~/.ssh/id_rsa.pub in un file nella directory home ~/.ssh dell'account remoto denominata authorized_keys.

Copiare la Chiave Pubblica Manualmente

Se non si dispone dell'accesso SSH basato su password al server, seguire queste istruzioni.

Aggiungere manualmente il contenuto del tuo file id_rsa.pub al file ~/.ssh/authorized_keys sul tuo server remoto.

Visualizzare e copiare il contenuto della vostra chiave pubblica id_rsa.pub:
cat ~/.ssh/id_rsa.pub

Dovresti ricevere un messaggio di output simile al seguente:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDdTV41d4YIf0EqISOryVM4zF2Ucv8ekGtOg6t3RjSJqKfW/XS6n7bzI5yZd3QlvI0M8P+xdUnKxIQpDSkBJaySOmVq1QmmE74iRFvWygsqB3jlEyagnH8h3SKjh5FLTxxUZQxwU351BRCUSxoqLdA30KgrXKOWM/C9lm7dx3DsucV/iGdsv8m2ojwdwwRUFTfWo4PsjJOZ8XX+JciqdTVIbKnPklsosu+8+WvVKiuZYqaq4EMmQXX/wHXAo77FqWg+czDFwexYkFSIC6Lt5p3eS0RVNp4HyU36MmXvHsfIXhkaAJp5Myxd6FdFLcM/5zm52SqAZDnMwIXDr71aArId [email protected]

Accedi al tuo host remoto usando il metodo che hai a disposizione.

Creare la directory ~/.ssh, questo comando creerà la directory, se necessario, o non farà nulla se già esiste:
mkdir -p ~/.ssh

Ora puoi creare o modificare il file authorized_keys all'interno di questa directory. È possibile aggiungere il contenuto del proprio file id_rsa.pub alla fine del file authorized_keys.

Eseguire il seguente comando, sostituendo chiave_pubblica con il messaggio di output ricevuto dal comando precedente cat ~/.ssh/id_rsa.pub:
echo chiave_pubblica >> ~/.ssh/authorized_keys

ESEMPIO (non utilizzare questa chiave pubblica):
echo AAAAB3NzaC1yc2EAAAADAQABAAABAQDdTV41d4YIf0EqISOryVM4zF2Ucv8ekGtOg6t3RjSJqKfW/XS6n7bzI5yZd3QlvI0M8P+xdUnKxIQpDSkBJaySOmVq1QmmE74iRFvWygsqB3jlEyagnH8h3SKjh5FLTxxUZQxwU351BRCUSxoqLdA30KgrXKOWM/C9lm7dx3DsucV/iGdsv8m2ojwdwwRUFTfWo4PsjJOZ8XX+JciqdTVIbKnPklsosu+8+WvVKiuZYqaq4EMmQXX/wHXAo77FqWg+czDFwexYkFSIC6Lt5p3eS0RVNp4HyU36MmXvHsfIXhkaAJp5Myxd6FdFLcM/5zm52SqAZDnMwIXDr71aArId [email protected] >> ~/.ssh/authorized_keys

Impostare i permessi corretti per la directory ~/.ssh e per authorized_keys:
chmod -R go= ~/.ssh

Se state utilizzando l'account root per impostare la chiave per un account utente non root, eseguire questo comando:
chown -R tuo_utente:tuo_utente ~/.ssh

Autenticarsi su Ubuntu Server utilizzando le chiavi SSH

Adesso è possibile effettuare il login all'host remoto senza utilizzare la password:
ssh [email protected]_IP

Se è la prima volta che ti colleghi a questo host, potresti ricevere un messaggio di output simile al seguente:

The authenticity of host 'INDIRIZZO_IP (INDIRIZZO_IP)' can't be established.
ECDSA key fingerprint is SHA256:E3NlUzqo/QZm8PF1QD9grtkPm8NIzyp0wHfMZGB/t6M.
Are you sure you want to continue connecting (yes/no)? yes

Ciò significa che il tuo computer locale non riconosce l'host remoto. Digitare "yes" e quindi premere INVIO per continuare.

Se non hai fornito una passphrase per la tua chiave privata, sarai loggato immediatamente. Se hai fornito una passphrase per la chiave privata quando hai creato la chiave, ti verrà richiesto di inserirla ed effettuerai l'accesso alla shell del tuo server remoto.

Disabilitare l'Autenticazione con la Password sul Server

Se sei riuscito ad accedere al tuo account usando SSH senza password, hai configurato correttamente l'autenticazione basata su chiave SSH sul tuo account. Tuttavia, il meccanismo di autenticazione basato su password è ancora attivo, il che significa che il server è ancora esposto a attacchi di brute-force.

Prima di completare i passaggi di questa sezione, assicurarsi di avere l'autenticazione basata su chiave SSH configurata per l'account root su questo server o, preferibilmente, di avere l'autenticazione basata su chiave SSH configurata per un account non root su questo server con privilegi sudo. Questo passaggio bloccherà gli accessi basati su password.

Una volta verificato che l'account remoto dispone di privilegi amministrativi, accedere al server remoto con le chiavi SSH, come root o con un account con privilegi sudo. Quindi, apri il file di configurazione del daemon SSH:
sudo nano /etc/ssh/sshd_config

All'interno del file, cercare la voce PasswordAuthentication. Questo potrebbe essere commentato. Decommentare la riga e impostare il valore su "no". Ciò disabiliterà la possibilità di accedere tramite SSH utilizzando le password dell'account:

...
PasswordAuthentication no
...

Salvare e chiudere il file.

Riavviare il servizio sshd:
sudo systemctl restart ssh

Per precauzione, apri una nuova finestra di terminale e verifica che il servizio SSH funzioni correttamente prima di chiudere questa sessione:
ssh [email protected]_IP

Una volta verificato il servizio SSH, è possibile chiudere in sicurezza tutte le sessioni correnti del server.

Il demone SSH sul tuo server Ubuntu ora risponde solo alle chiavi SSH. L'autenticazione basata su password è stata disabilitata con successo.

La configurazione delle SSH Keys su Ubuntu 18.04 LTS è terminata