Il primo passo per impostare le chiavi SSH è creare una coppia di chiavi sul computer client (in genere su un computer):
$ ssh-keygen
Per cominciare, ssh-keygen creerà una coppia di chiavi RSA a 2048 bit, che sarà sufficientemente sicura per la maggior parte dei casi d'uso.
In alternativa, puoi facoltativamente passare il flag -b 4096 per creare una chiave più grande da 4096 bit
Dopo aver inserito il comando, dovresti vedere il seguente prompt:
Output Enter file in which to save the key (/your_home/.ssh/id_rsa):
Premi Invio per salvare la coppia di chiavi nella sottodirectory .ssh/ della tua directory home oppure in un percorso alternativo personalizzato. Dovrebbe apparire il seguente messaggio:
Output Enter passphrase ( leave empty for no passphrase):
Facoltativamente, è possibile inserire una passphrase sicura, il che è altamente consigliato. Una passphrase aggiunge un ulteriore livello di sicurezza per impedire l'accesso da parte di 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.
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_host The key's randomart image is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+
Ora dovresti avere una chiave pubblica e una privata che puoi utilizzare per l'autenticazione. Il passaggio successivo consiste nel salvare la chiave pubblica sul tuo server in modo da poter utilizzare l'autenticazione basata su chiave SSH per accedere.
Il modo più rapido per copiare la chiave pubblica sull'host Ubuntu è utilizzare un'utilità chiamata ssh-copy-id. Questo metodo è altamente raccomandato, se disponibile. Se ssh-copy-id non è 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).
Lo strumento ssh-copy-id è incluso di default in molti sistemi operativi e potrebbe essere disponibile sul tuo sistema locale. Per funzionare, è necessario disporre di un accesso SSH al server basato su password. Per utilizzare l'utilità, è necessario specificare l'host remoto a cui si desidera connettersi e aggiungere semplicemente l'account utente a cui si ha accesso SSH tramite password. Questo sarà l'account su cui verrà copiata la chiave SSH pubblica.
La sintassi è:
$ ssh-copy-id username@remote_host
Potresti visualizzare il seguente messaggio:
Output The authenticity of host '111.111.11.111 (111.111.11.111)' 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 ha riconosciuto l'host remoto. Molto probabilmente ciò accade la prima volta che ci si connette a un nuovo host. Digitare "sì" e premere INVIO per continuare.
Successivamente, l'utilità analizzerà il tuo account locale alla ricerca della chiave id_rsa.pub creata in precedenza. Una volta trovata 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@111.111.11.111's password:
Digita la password (nota che la tua digitazione non verrà visualizzata per motivi di sicurezza) e premi INVIO. L'utilità si connetterà 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.
Dopodiché dovresti vedere il seguente output:
Output Number of key(s) added: 1 Logging into the machine, with: "ssh 'username@111.111.11.111'" and check to make sure that only the key you wanted was added.
A questo punto del processo, la chiave id_rsa.pub è stata caricata sull'account remoto.
Se non hai a disposizione ssh-copy-id, ma hai accesso SSH basato su password a un account sul tuo server, puoi caricare le tue chiavi utilizzando un metodo SSH convenzionale.
Possiamo farlo usando il comando cat per leggere il contenuto della chiave SSH pubblica sul nostro computer locale e inviarlo tramite una connessione SSH al server remoto. D'altra parte, possiamo assicurarci che la directory ~/.ssh esista sotto l'account che stiamo utilizzando e quindi inviare il contenuto inviato 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 quelle aggiunte in precedenza.
Il comando completo è il seguente:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Potresti visualizzare il seguente messaggio:
Output The authenticity of host '111.111.11.111 (111.111.11.111)' 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 connetterai a un nuovo host. Digita "sì" e premi INVIO per continuare.
Successivamente, ti verrà richiesto di immettere la password dell'account utente remoto:
Output username@111.111.11.111's password:
Dopo aver inserito la password, il contenuto della chiave id_rsa.pub verrà copiato alla fine del file authorized_keys dell'account dell'utente remoto. Se l'operazione è andata a buon fine, passare al punto 3.
Se non si dispone di un accesso SSH basato su password al server, sarà necessario completare manualmente la procedura sopra descritta.
Aggiungeremo manualmente il contenuto del tuo file id_rsa.pub al file ~/.ssh/authorized_keys sul tuo computer remoto.
Per visualizzare il contenuto della chiave id_rsa.pub, digita quanto segue nel tuo computer locale:
cat ~/.ssh/id_rsa.pub
Vedrai il contenuto della chiave, che dovrebbe apparire più o meno così:
Output ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle 7Q+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 il metodo che hai a disposizione.
Una volta ottenuto l'accesso al tuo account sul server remoto, assicurati che la directory ~/.ssh esista. Il comando creerà la directory se necessario, altrimenti non farà nulla se esiste già:
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, utilizzando questo comando:
Nel comando seguente, sostituisci public_key_string con l'output del comando cat ~/.ssh/id_rsa.pub eseguito sul tuo sistema locale. Deve iniziare con ssh-rsa AAAA....
echo public_key_string >> ~/.ssh/authorized_keys
Ora possiamo provare ad accedere al nostro server Ubuntu con un'autenticazione senza password.
Se hai completato una delle procedure sopra descritte, dovresti riuscire ad accedere all'host remoto senza la password dell'account remoto.
Il procedimento di base è lo stesso dell'altra volta che lo abbiamo usato:
$ ssh username@remote_host
Se è la prima volta che ti connetti a questo host (se hai utilizzato l'ultimo metodo sopra), potresti vedere qualcosa di simile a questo:
Output The authenticity of host '111.111.11.111 (111.111.11.111)' 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
Se ciò si verifica, significa che il computer locale non riconosce l'host remoto. Digitare "sì" e quindi premere INVIO per continuare.
Se non hai fornito una passphrase per la tua chiave privata, l'accesso verrà effettuato immediatamente. Se hai fornito una passphrase per la chiave privata al momento della creazione della chiave, ti verrà richiesto di inserirla ora (nota che i tasti premuti non verranno visualizzati nella sessione del terminale per motivi di sicurezza). Dopo l'autenticazione, dovrebbe aprirsi una nuova sessione shell con l'account configurato sul server Ubuntu.
Se l'autenticazione basata su chiave ha avuto esito positivo, continua a leggere per scoprire come proteggere ulteriormente il tuo sistema disabilitando l'autenticazione tramite password.
Se sei riuscito ad accedere al tuo account tramite SSH senza password, hai configurato correttamente 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 ad attacchi brute-force.
Prima di completare i passaggi descritti 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, quindi è fondamentale assicurarsi di poter comunque ottenere l'accesso amministrativo.
Dopo aver verificato che il tuo account remoto abbia privilegi amministrativi, accedi al server remoto con le chiavi SSH, come root o con un account con privilegi sudo. Quindi, apri il file di configurazione del demone SSH:
sudo nano /etc/ssh/sshd_config
All'interno del file, cerca una direttiva chiamata PasswordAuthentication. Potrebbe essere commentata. Rimuovi il commento dalla riga e imposta il valore su "no". Questo disabiliterà la possibilità di accedere tramite SSH utilizzando le password degli account:
/etc/ssh/sshd_config ... PasswordAuthentication no ...
Salvare e chiudere il file al termine premendo CTRL + X, quindi Y per confermare il salvataggio del file e infine INVIO per uscire da nano. Per implementare effettivamente queste modifiche, dobbiamo riavviare il servizio sshd:
$ sudo systemctl restart ssh
Per precauzione, apri una nuova finestra del terminale e verifica che il servizio SSH funzioni correttamente prima di chiudere questa sessione:
$ ssh username@remote_host
Dopo aver verificato il servizio SSH, puoi chiudere in tutta 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 correttamente.
Una volta completato il tutorial, dovresti aver configurato l'autenticazione basata su chiave SSH sul tuo server, consentendoti di accedere senza fornire una password per l'account.