Come Configurare le Chiavi SSH su Debian 11

Introduzione

SSH, o shell sicura, è un protocollo criptato utilizzato per amministrare e comunicare con i server. Quando si lavora con un server Debian, è probabile che si trascorra la maggior parte del tempo in una sessione di terminale connessa al server tramite SSH.

In questa guida, ci concentreremo sulla configurazione delle chiavi SSH per un’installazione di Debian 11 base. Le chiavi SSH forniscono un modo facile e sicuro per accedere al server e sono consigliate per tutti gli utenti.

Passo 1 — Creare la coppia di chiavi RSA

Il primo passo è creare una coppia di chiavi sulla macchina client (di solito il tuo computer):

  1. ssh-keygen

Per impostazione predefinita ssh-keygen creerà una coppia di chiavi RSA da 3072 bit, che è abbastanza sicura per la maggior parte degli utilizzi (opzionalmente è possibile passare il flag -b 4096 per creare una chiave più grande da 4096 bit).

Dopo aver inserito il comando, dovresti vedere il seguente output:

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

Premi invio per salvare la coppia di chiavi nella sottodirectory .ssh/ nella tua directory home, o specifica un percorso alternativo.

Se in precedenza avevi generato una coppia di chiavi SSH, potresti vedere il seguente prompt:

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

Avviso: Se scegli di sovrascrivere la chiave su disco, non sarai più in grado di autenticarti usando la chiave precedente. Sii molto attento quando selezioni sì, poiché si tratta di un processo distruttivo che non può essere invertito.

Dovresti quindi vedere il seguente prompt:

Output
Enter passphrase (empty for no passphrase):

Qui opzionalmente puoi inserire una passphrase sicura, cosa altamente consigliata. Una passphrase aggiunge un ulteriore livello di sicurezza per impedire agli utenti non autorizzati di effettuare l’accesso. Per saperne di più sulla sicurezza, consulta il nostro tutorial su Come Configurare l’Autenticazione Basata su Chiave SSH su un Server Linux.

Dovresti quindi vedere il seguente output:

Output
Your identification has been saved in /your_home/.ssh/id_rsa. Your public key has been saved in /your_home/.ssh/id_rsa.pub. The key fingerprint is: SHA256:5E2BtTN9FHPBNoRXAB/EdjtHNYOHzTBzG5qUv7S3hyM root@debian-suricata The key's randomart image is: +---[RSA 3072]----+ | oo .O^XB| | . +.BO%B| | . = .+B+o| | o o o . =.| | S . . =| | o.| | .o| | E o..| | . ..| +----[SHA256]-----+

Ora hai una chiave pubblica e una privata che puoi utilizzare per l’autenticazione. Il passo successivo è posizionare la chiave pubblica sul tuo server in modo da poter utilizzare l’autenticazione basata su chiave SSH per accedere.

Passaggio 2 — Copia la Chiave Pubblica sul Server Debian

Il modo più veloce per copiare la tua chiave pubblica sull’host Debian è utilizzare un’utilità chiamata ssh-copy-id. A causa della sua semplicità, questo metodo è altamente consigliato se disponibile. Se non hai ssh-copy-id disponibile sulla tua macchina client, puoi utilizzare uno dei due metodi alternativi forniti in questa sezione (copia tramite SSH basato su password, o copia manuale della chiave).

Copiare la chiave pubblica usando ssh-copy-id

Lo strumento ssh-copy-id è incluso per impostazione predefinita in molti sistemi operativi, quindi potresti averlo disponibile sul tuo sistema locale. Perché questo metodo funzioni, è necessario avere già accesso SSH basato su password al tuo server.

Per utilizzare l’utilità, è sufficiente specificare l’host remoto a cui desideri connetterti e l’account utente al quale hai accesso SSH basato su password. Questo è l’account su cui verrà copiata la tua chiave SSH pubblica.

La sintassi è:

  1. ssh-copy-id username@remote_host

Potresti vedere il seguente messaggio:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

Questo significa che il tuo computer locale non riconosce l’host remoto. Questo accadrà la prima volta che ti connetti a un nuovo host. Digita “sì” e premi INVIO per continuare.

Successivamente, l’utilità scannerizzerà il tuo account locale per la chiave id_rsa.pub che abbiamo creato in precedenza. Quando trova la chiave, ti richiederà la password dell’account utente remoto:

Output
/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 username@203.0.113.1's password:

Digita la password (ciò che scrivi non verrà visualizzato per motivi di sicurezza) e premi INVIO. L’utilità si connetterà all’account sull’host remoto utilizzando la password fornita. Copierà quindi i contenuti della tua chiave ~/.ssh/id_rsa.pub in un file nella directory home dell’account remoto ~/.ssh chiamato authorized_keys.

Dovresti vedere il seguente output:

Output
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'username@203.0.113.1'" and check to make sure that only the key(s) you wanted were added.

A questo punto, la tua chiave id_rsa.pub è stata caricata nell’account remoto. Puoi procedere con il Passaggio 3.

Copiare la Chiave Pubblica Usando SSH

Se non hai ssh-copy-id disponibile, ma hai accesso SSH basato su password a un account sul tuo server, puoi caricare le tue chiavi usando un metodo SSH convenzionale.

Questo può essere fatto utilizzando il comando cat per leggere il contenuto della chiave pubblica SSH sul nostro computer locale e instradando quel contenuto attraverso una connessione SSH al server remoto.

Dall’altra parte, possiamo assicurarci che la directory ~/.ssh esista e abbia le autorizzazioni corrette sotto l’account che stiamo usando.

Poi possiamo far uscire il contenuto che abbiamo instradato in un file chiamato authorized_keys all’interno di questa directory. Utilizzeremo il simbolo di reindirizzamento >> per aggiungere il contenuto invece di sovrascriverlo. Questo ci permetterà di aggiungere chiavi senza distruggere le chiavi aggiunte in precedenza.

Il comando completo appare così:

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

Potresti vedere il seguente messaggio:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

Questo significa che il tuo computer locale non riconosce l’host remoto. Questo accadrà la prima volta che ti colleghi a un nuovo host. Digita “yes” e premi ENTER per continuare.

Successivamente, dovresti essere invitato a inserire la password dell’account utente remoto:

Output
username@203.0.113.1's password:

Dopo aver inserito la tua password, il contenuto della tua chiave id_rsa.pub verrà copiato alla fine del file authorized_keys dell’account utente remoto. Continua con Passaggio 3 se questo è stato eseguito correttamente.

Copiare la Chiave Pubblica Manualmente

Se non hai accesso SSH basato su password al tuo server disponibile, dovrai completare il processo sopra manualmente.

Aggiungeremo manualmente il contenuto del tuo file id_rsa.pub al file ~/.ssh/authorized_keys sulla tua macchina remota.

Per visualizzare il contenuto della tua chiave id_rsa.pub, digita questo sul tuo computer locale:

  1. cat ~/.ssh/id_rsa.pub

Vedrai il contenuto della chiave, che dovrebbe assomigliare a questo:

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= demo@test

Accedi al tuo host remoto usando il metodo disponibile.

Una volta ottenuto l’accesso al tuo account sul server remoto, assicurati che la directory ~/.ssh esista. Questo comando creerà la directory se necessario, o non farà nulla se esiste già:

  1. mkdir -p ~/.ssh

Ora puoi creare o modificare il file authorized_keys all’interno di questa directory. Puoi aggiungere i contenuti del tuo file id_rsa.pub alla fine del file authorized_keys, creandolo se necessario, usando questo comando:

  1. echo public_key_string >> ~/.ssh/authorized_keys

Nel comando sopra, sostituisci il public_key_string con l’output del comando cat ~/.ssh/id_rsa.pub che hai eseguito sul tuo sistema locale. Dovrebbe iniziare con ssh-rsa AAAA....

Infine, ci assicureremo che la directory ~/.ssh e il file authorized_keys abbiano impostato i permessi appropriati:

  1. chmod -R go= ~/.ssh

Questo rimuove in modo ricorsivo tutti i permessi “gruppo” e “altro” per la directory ~/.ssh/.

Se stai utilizzando l’account root per impostare le chiavi per un account utente, è anche importante che la directory ~/.ssh appartenga all’utente e non a root:

  1. chown -R sammy:sammy ~/.ssh

In questo tutorial il nostro utente si chiama sammy ma dovresti sostituire il nome utente appropriato nel comando sopra.

Ora puoi tentare l’autenticazione senza password con il tuo server Debian.

Passaggio 3 — Autenticarsi al Server Debian Usando le Chiavi SSH

Se hai completato con successo una delle procedure sopra, dovresti essere in grado di accedere all’host remoto senza la password dell’account remoto.

Il processo generale è lo stesso:

  1. ssh username@remote_host

Se è la prima volta che ti connetti a questo host (se hai usato l’ultimo metodo sopra), potresti vedere qualcosa del genere:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

Ciò significa che il tuo computer locale non riconosce l’host remoto. Digita “sì” e poi premi INVIO per continuare.

Se non hai fornito una passphrase per la tua chiave privata, verrai immediatamente autenticato. Se hai fornito una passphrase per la chiave privata quando hai creato la chiave, ti verrà chiesto di inserirla ora (nota che i tuoi tasti premuti non verranno visualizzati nella sessione terminale per motivi di sicurezza). Dopo l’autenticazione, dovrebbe aprirsi una nuova sessione shell per te con l’account configurato sul server Debian.

Se l’autenticazione basata su chiave è stata riuscita, continua a imparare come proteggere ulteriormente il sistema disabilitando l’autenticazione tramite password.

Passaggio 4 — Disabilita l’autenticazione tramite password sul tuo server

Se sei riuscito ad accedere al tuo account utilizzando SSH senza password, hai configurato con successo l’autenticazione basata su chiave SSH per il tuo account. Tuttavia, il meccanismo di autenticazione basato su password è ancora attivo, il che significa che il tuo server è ancora esposto a attacchi di forza bruta.

Prima di completare i passaggi in questa sezione, assicurati di avere configurata l’autenticazione basata su chiavi SSH per l’account root su questo server, o preferibilmente, che tu abbia configurata l’autenticazione basata su chiavi SSH per un account non-root su questo server con privilegi sudo. Questo passaggio bloccherà gli accessi basati su password, quindi assicurati di poter comunque ottenere accesso amministrativo.

Dopo aver confermato che il tuo account remoto ha privilegi amministrativi, accedi al tuo server remoto con le chiavi SSH, sia come root o con un account con privilegi sudo. Quindi, apri il file di configurazione del demone SSH:

  1. sudo nano /etc/ssh/sshd_config

All’interno del file, cerca una direttiva chiamata PasswordAuthentication. Potrebbe essere commentata. Togli il commento alla riga e imposta il valore su “no”. Questo disabiliterà la possibilità di accedere via SSH utilizzando le password dell’account:

/etc/ssh/sshd_config
...
PasswordAuthentication no
...

Salva e chiudi il file quando hai finito premendo CTRL + X, quindi Y per confermare il salvataggio del file, e infine INVIO per uscire da nano. Per implementare effettivamente queste modifiche, è necessario riavviare il servizio sshd:

  1. sudo systemctl restart ssh

Come precauzione, apri una nuova finestra di terminale e verifica che il servizio SSH funzioni correttamente prima di chiudere questa sessione:

  1. ssh username@remote_host

Una volta verificato il servizio SSH, puoi chiudere in modo sicuro tutte le sessioni attive sul server attuale.

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

Conclusione

Ora dovresti avere configurata l’autenticazione basata su chiavi SSH sul tuo server, consentendoti di accedere senza fornire una password dell’account.

Se desideri saperne di più su come lavorare con SSH, dai un’occhiata alla nostra Guida essenziale SSH.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-11