Come impostare le chiavi SSH su Ubuntu 16.04

Introduzione

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

In questa guida, ci concentreremo sulla creazione di chiavi SSH per un’installazione di vaniglia Ubuntu 16.04. Le chiavi SSH forniscono un modo semplice e sicuro di accedere al server e sono consigliate per tutti gli utenti.

Fase 1 — Creare la Coppia di chiavi RSA

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

  • ssh-keygen

per impostazione predefinita ssh-keygen crea una RSA 2048 bit coppia di chiavi, che è abbastanza sicuro per la maggior parte dei casi d’uso (si può eventualmente passare il -b 4096 flag per creare una grande 4096 bit key).

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):

Premere ENTERper salvare la coppia di chiavi nella sottodirectory .ssh/ nella directory home o specificare un percorso alternativo.

Se in precedenza è stata generata una coppia di chiavi SSH, è possibile visualizzare il seguente prompt:

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

Se si sceglie di sovrascrivere la chiave su disco, non sarà più possibile eseguire l’autenticazione utilizzando la chiave precedente. Fare molta attenzione quando si seleziona sì, in quanto questo è un processo distruttivo che non può essere invertito.

Dovresti quindi vedere il seguente prompt:

Output
Enter passphrase (empty for no passphrase):

Qui puoi facoltativamente inserire una passphrase sicura, che è altamente raccomandata. Una passphrase aggiunge un ulteriore livello di sicurezza per impedire agli utenti non autorizzati di accedere. Per ulteriori informazioni 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:a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_hostThe key's randomart image is:+------+| ..o || E o= . || o. o || .. || ..S || o o. || =o.+. ||. =++.. ||o=++. |+-----------------+

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

Passo 2 — Copiare la chiave pubblica per Ubuntu Server

Il modo più rapido per copiare la chiave pubblica per l’host di Ubuntu è quello di utilizzare un programma di utilità chiamatossh-copy-id. Grazie alla sua semplicità, questo metodo è altamente raccomandato se disponibile. Se non si dispone di ssh-copy-id disponibile sul computer client, è possibile 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 strumentossh-copy-id è incluso di default in molti sistemi operativi, quindi potresti averlo disponibile sul tuo sistema locale. Affinché questo metodo funzioni, è necessario disporre già dell’accesso SSH basato su password al server.

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

La sintassi è:

  • ssh-copy-id username@remote_host

È possibile visualizzare 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. Ciò avverrà la prima volta che ti connetti a un nuovo host. Digitare ” yes ” e premere ENTER per continuare.

Successivamente, l’utilità eseguirà la scansione del tuo account locale per la chiaveid_rsa.pub che abbiamo creato in precedenza. Quando trova la chiave, ti verrà richiesta 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 [email protected]'s password:

Digitare la password (la digitazione non verrà visualizzata per motivi di sicurezza) e premere ENTER. L’utilità si collegherà all’account sull’host remoto utilizzando la password fornita. Copierà quindi il contenuto della chiave ~/.ssh/id_rsa.pub in un file nella directory home dell’account remoto ~/.ssh chiamata authorized_keys.

Dovresti vedere il seguente output:

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

A questo punto, la chiaveid_rsa.pub è stata caricata nell’account remoto. È possibile continuare al Punto 3.

Copia della chiave pubblica utilizzando SSH

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

Possiamo farlo usando il comandocat per leggere il contenuto della chiave SSH pubblica sul nostro computer locale e piping che attraverso una connessione SSH al server remoto.

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

Possiamo quindi emettere il contenuto che abbiamo convogliato in un file chiamatoauthorized_keys all’interno di questa directory. Useremo il simbolo di reindirizzamento>> per aggiungere il contenuto invece di sovrascriverlo. Questo ci permetterà di aggiungere le chiavi senza distruggere le chiavi aggiunte in precedenza.

Il comando completo è simile a questo:

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

È possibile visualizzare 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. Ciò avverrà la prima volta che ti connetti a un nuovo host. Digitare ” yes ” e premere ENTER per continuare.

Successivamente, ti verrà richiesto di inserire la password dell’account utente remoto:

Output
[email protected]'s password:

Dopo aver inserito la password, il contenuto della chiaveid_rsa.pub verrà copiato alla fine del fileauthorized_keys dell’account utente remoto. Continuare al passaggio 3 se questo ha avuto successo.

Copia manuale della chiave pubblica

Se non si dispone di accesso SSH basato su password al server disponibile, sarà necessario completare il processo di cui sopra manualmente.

Aggiungeremo manualmente il contenuto del fileid_rsa.pub al file~/.ssh/authorized_keys sul computer remoto.

Per visualizzare il contenuto della chiave id_rsa.pub, digitala nel tuo computer locale:

  • cat ~/.ssh/id_rsa.pub

Vedrai il contenuto della chiave, che dovrebbe essere simile a questo:

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 disponibile.

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à:

  • mkdir -p ~/.ssh

Ora, è possibile creare o modificare il file authorized_keys all’interno di questa directory. È possibile aggiungere il contenuto del id_rsa.pub file alla fine del authorized_keys file, creando, se necessario, usando questo comando:

  • echo public_key_string >> ~/.ssh/authorized_keys

il comando sostituire il public_key_string con l’uscita dal cat ~/.ssh/id_rsa.pub comando che viene eseguito sul sistema locale. Dovrebbe iniziare con ssh-rsa AAAA....

Infine, ci assicureremo che la directory~/.ssh e authorized_keys abbiano le autorizzazioni appropriate impostate:

  • chmod -R go= ~/.ssh

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

Se si utilizza il tag root account per impostare i tasti per un account utente, è anche importante che il ~/.ssh directory appartiene l’utente e non root:

  • chown -R sammy:sammy ~/.ssh

In questo tutorial il nostro utente di nome sammy, ma è consigliabile sostituire il nome utente appropriato nel comando precedente.

Ora possiamo tentare l’autenticazione senza password con il nostro server Ubuntu.

Passo 3 — Autenticare al server Ubuntu utilizzando le chiavi SSH

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

Il processo di base è lo stesso:

  • ssh username@remote_host

Se questa è 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 computer locale non riconosce l’host remoto. Digitare “yes”e quindi premere ENTER 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 ora (nota che le tue sequenze di tasti non verranno visualizzate nella sessione del terminale per sicurezza). Dopo l’autenticazione, una nuova sessione di shell dovrebbe aprirsi per te con l’account configurato sul server Ubuntu.

Se l’autenticazione basata su chiave ha avuto successo, continuare per imparare a proteggere ulteriormente il sistema disabilitando l’autenticazione della password.

Passo 4 — Disabilitare l’autenticazione della password sul server

Se sei stato in grado di accedere al tuo account utilizzando SSH senza una password, è stata configurata con successo l’autenticazione basata su SSH-chiave per il tuo account. Tuttavia, il meccanismo di autenticazione basato su password è ancora attivo, il che significa che il server è ancora esposto ad attacchi di forza bruta.

Prima di completare i passaggi in questa sezione, assicurarsi di avere configurato l’autenticazione basata su SSH-key per l’account root su questo server o, preferibilmente, di avere configurato l’autenticazione basata su SSH-key per un account non root su questo server con privilegi sudo. Questo passaggio bloccherà gli accessi basati su password, in modo da garantire che sarà ancora in grado di ottenere l’accesso amministrativo è fondamentale.

Una volta che hai confermato che il tuo account remoto dispone di privilegi amministrativi, accedi al tuo server remoto con le chiavi SSH, come root o con un account con privilegisudo. Quindi, apri il file di configurazione del demone SSH:

  • sudo nano /etc/ssh/sshd_config

All’interno del file, cerca una direttiva chiamata PasswordAuthentication. Questo può essere commentato. Decommentare la riga e impostare il valore su “no”. Ciò disabiliterà la possibilità di accedere tramite SSH utilizzando le password dell’account:

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

Salvare e chiudere il file quando hai finito, premendo il tasto CTRLX, quindi Y per confermare il salvataggio del file, e infine ENTER per uscire da nano. Per implementare effettivamente queste modifiche, è necessario riavviare il serviziosshd:

  • sudo systemctl restart ssh

Per precauzione, aprire una nuova finestra di terminale e verificare che il servizio SSH funzioni correttamente prima di chiudere questa sessione:

  • ssh username@remote_host

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

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

Conclusione

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

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



Lascia un commento

Il tuo indirizzo email non sarà pubblicato.