Ricerca nel sito web

Come configurare le chiavi SSH su Ubuntu 18.04


introduzione

SSH, o secure shell, è un protocollo crittografato utilizzato per amministrare e comunicare con i server. Quando lavori con un server Ubuntu, è probabile che trascorrerai la maggior parte del tuo tempo in una sessione terminale connessa al tuo server tramite SSH.

In questa guida, ci concentreremo sull'impostazione delle chiavi SSH per un'installazione di Ubuntu 18.04. Le chiavi SSH forniscono un modo sicuro per accedere al tuo server e sono consigliate a tutti gli utenti.

Passaggio 1: creazione della coppia di chiavi RSA

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

  1. ssh-keygen

Per impostazione predefinita, ssh-keygen creerà una coppia di chiavi RSA a 2048 bit, che è abbastanza sicura per la maggior parte dei casi d'uso (puoi facoltativamente passare il flag -b 4096 per creare una chiave più grande a 4096 bit).

Dopo aver inserito il comando, dovresti ricevere 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 home directory o specifica un percorso alternativo.

Se hai precedentemente generato una coppia di chiavi SSH, potresti ricevere il seguente messaggio:

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

Se scegli di sovrascrivere la chiave su disco, non sarai più in grado di autenticarti utilizzando la chiave precedente. Fai molta attenzione quando selezioni sì, poiché si tratta di un processo distruttivo che non può essere invertito.

Il prompt successivo ti chiederà di inserire una passphrase sicura:

Output
Enter passphrase (empty for no passphrase):

Qui hai la possibilità di inserire una passphrase sicura, che è altamente raccomandata. Una passphrase aggiunge un livello di sicurezza per impedire l'accesso a utenti non autorizzati. Per ulteriori informazioni sulla sicurezza, consulta il nostro tutorial su Come configurare l'autenticazione basata su chiave SSH su un server Linux.

Tutti insieme, il comando ssh-keygen restituirà un output simile al seguente:

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: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host The key's randomart image is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+

Ora disponi di una chiave pubblica e privata che puoi utilizzare per l'autenticazione. Il passaggio successivo consiste nel posizionare la chiave pubblica sul server in modo da poter utilizzare l'autenticazione basata su chiave SSH per accedere.

Passaggio 2: copia della chiave pubblica su Ubuntu Server

Il modo più veloce per copiare la tua chiave pubblica sull'host Ubuntu è usare un'utilità chiamata ssh-copy-id. Per la sua semplicità, questo metodo è altamente raccomandato se disponibile. Se non hai ssh-copy-id disponibile sul tuo computer client, puoi utilizzare uno dei due metodi alternativi forniti in questa sezione (copia tramite SSH basato su password o copiando manualmente il chiave).

Copia della chiave pubblica utilizzando ssh-copy-id

Lo strumento ssh-copy-id è incluso per impostazione predefinita in molti sistemi operativi, quindi potresti averlo disponibile sul tuo sistema locale.

Nota: affinché questo metodo funzioni, devi già disporre dell'accesso SSH basato su password al tuo server.

Per utilizzare l'utilità, specificare l'host remoto a cui si desidera connettersi e l'account utente a cui si dispone dell'accesso SSH basato su password. Questo è l'account in cui verrà copiata la tua chiave SSH pubblica.

La sintassi è la seguente:

  1. ssh-copy-id username@remote_host

Potresti ricevere 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

Ciò significa che il computer locale non riconosce l'host remoto. Questo accadrà la prima volta che ti connetti a un nuovo host. Scrivi \sì e premi INVIO per continuare.

Successivamente, l'utilità eseguirà la scansione del tuo account locale per la chiave id_rsa.pub che hai creato in precedenza. Quando trova la chiave, ti chiederà la password dell'account dell'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:

Scrivi la password (non verrà visualizzato nulla per motivi di sicurezza) e premi INVIO. L'utilità si collegherà all'account sull'host remoto utilizzando la password fornita. Quindi copierà il contenuto della tua chiave ~/.ssh/id_rsa.pub in un file nella directory home ~/.ssh dell'account remoto chiamato authorized_keys< /codice>.

Dovresti ricevere 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 sull'account remoto. Puoi continuare con il passaggio 3.

Copia della chiave pubblica tramite 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. Ricorda, funzionerà solo se disponi di un accesso SSH basato su password al tuo server.

Puoi farlo usando il comando cat per leggere il contenuto della chiave SSH pubblica sul tuo computer locale e inviarlo attraverso una connessione SSH al server remoto.

Dall'altro lato, puoi assicurarti che la directory ~/.ssh esista e disponga delle autorizzazioni corrette sotto l'account che stai utilizzando.

Puoi quindi emettere il contenuto che hai reindirizzato in un file chiamato authorized_keys all'interno di questa directory. Usa il simbolo di reindirizzamento >> per aggiungere il contenuto invece di sovrascriverlo. Ciò ti consentirà di aggiungere chiavi senza distruggere le chiavi aggiunte in precedenza.

Il comando completo viene visualizzato come segue:

  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 ricevere 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

Ciò significa che il computer locale non riconosce l'host remoto. Questo accadrà la prima volta che ti connetti a un nuovo host. Scrivi \sì e premi INVIO per continuare.

Successivamente, ti dovrebbe essere richiesto di 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 dell'utente remoto. Continuare con il passaggio 3 se l'operazione è andata a buon fine.

Copia manuale della chiave pubblica

Se non disponi di un accesso SSH basato su password al tuo server, dovrai completare il processo manualmente.

Questa sezione spiega come aggiungere manualmente il contenuto del tuo file id_rsa.pub al file ~/.ssh/authorized_keys sulla tua macchina remota.

Per visualizzare il contenuto del tuo id_rsa.pub esegui il seguente comando sul tuo computer locale:

  1. cat ~/.ssh/id_rsa.pub

Ciò restituirà il contenuto della chiave nell'output del comando:

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

Accedi al tuo host remoto utilizzando qualsiasi metodo tu abbia a disposizione.

Una volta che hai accesso al tuo account sul server remoto, dovresti assicurarti 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 il contenuto del tuo file id_rsa.pub alla fine del file authorized_keys, creandolo se necessario. Per questo comando, sostituisci 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...:

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

Infine, assicurati che la directory ~/.ssh e il file authorized_keys dispongano del set di autorizzazioni appropriato:

  1. chmod -R go= ~/.ssh

Questo rimuove ricorsivamente tutte le autorizzazioni \group e \other per la directory ~/.ssh/.

Se stai usando l'account root per impostare le chiavi per un account utente, è anche importante che la directory ~/.ssh appartenga all'utente e non a root. In questo tutorial il nostro utente si chiama sammy ma dovresti sostituire il nome utente appropriato nel seguente comando:

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

Ora puoi tentare l'autenticazione senza password con il tuo server Ubuntu.

Passaggio 3: autenticazione al server Ubuntu utilizzando le chiavi SSH

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

Il processo è lo stesso:

  1. ssh username@remote_host

Se è la prima volta che ti connetti a questo host (se hai utilizzato il metodo manuale), potresti ricevere 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 computer locale non riconosce l'host remoto. Scrivi \sì e poi premi INVIO per continuare.

Se non hai fornito una passphrase per la tua chiave privata, verrai loggato immediatamente. Se hai fornito una passphrase per la chiave privata quando hai creato la chiave, ti verrà chiesto di inserirla (tieni presente che le sequenze di tasti non verranno visualizzate nella sessione del terminale per motivi di sicurezza). Dopo l'autenticazione, dovrebbe aprirsi una nuova sessione di shell con l'account configurato sul server Ubuntu.

Se l'autenticazione basata su chiave ha avuto successo, continua per scoprire come proteggere ulteriormente il tuo sistema disabilitando l'autenticazione tramite password.

Passaggio 4: disabilitazione dell'autenticazione tramite password sul server

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

Prima di completare i passaggi in questa sezione, assicurati di aver configurato l'autenticazione basata su chiave SSH per l'account root su questo server o, preferibilmente, di aver configurato l'autenticazione basata su chiave SSH per un account non root su questo server con privilegi sudo. Questo passaggio bloccherà gli accessi basati su password, garantendo che sarai ancora in grado di ottenere l'accesso amministrativo è fondamentale.

Dopo aver confermato che il tuo account remoto ha privilegi amministrativi, accedi al tuo server remoto con le chiavi SSH, 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. Questo può essere commentato con un # all'inizio della riga. Rimuovere il commento dalla riga rimuovendo # e impostare il valore su no. Ciò disabiliterà la tua capacità di accedere tramite SSH utilizzando le password dell'account:

...
PasswordAuthentication no
...

Salva e chiudi il file quando hai finito premendo CTRL + X, quindi Y e INVIO per uscire da nano. Per attivare queste modifiche, devi riavviare il servizio sshd:

  1. sudo systemctl restart ssh

Per precauzione, apri una nuova finestra del terminale e verifica che il servizio SSH funzioni correttamente prima di chiudere la sessione corrente:

  1. ssh username@remote_host

Dopo aver verificato che il tuo servizio SSH funzioni correttamente, puoi chiudere in sicurezza tutte le sessioni del server in corso.

Il demone SSH sul tuo server Ubuntu ora risponde solo all'autenticazione basata su chiave SSH e l'autenticazione basata su password è stata disabilitata.

Conclusione

Ora dovresti avere l'autenticazione basata su chiave SSH configurata sul tuo server, che ti consente di accedere senza fornire una password dell'account.

Se vuoi saperne di più su come lavorare con SSH, dai un'occhiata alla nostra SSH Essentials Guide.