Ricerca nel sito web

Come configurare l'autenticazione basata su chiave SSH su un server Linux


introduzione

SSH, o secure shell, è un protocollo crittografato utilizzato per amministrare e comunicare con i server. Quando lavori con un server Linux, potresti spesso trascorrere gran parte del tuo tempo in una sessione terminale connessa al tuo server tramite SSH.

Sebbene esistano diversi modi per accedere a un server SSH, in questa guida ci concentreremo sull'impostazione delle chiavi SSH. Le chiavi SSH forniscono un modo estremamente sicuro per accedere al tuo server. Per questo motivo, questo è il metodo che consigliamo a tutti gli utenti.

Come funzionano le chiavi SSH?

Un server SSH può autenticare i client utilizzando una varietà di metodi diversi. Il più basilare di questi è l'autenticazione della password, che è facile da usare, ma non la più sicura.

Sebbene le password vengano inviate al server in modo sicuro, in genere non sono complesse o abbastanza lunghe da resistere a ripetuti e persistenti aggressori. La moderna potenza di elaborazione combinata con script automatizzati rende molto possibile la forzatura bruta di un account protetto da password. Sebbene esistano altri metodi per aggiungere ulteriore sicurezza (fail2ban, ecc.), le chiavi SSH si dimostrano un'alternativa affidabile e sicura.

Le coppie di chiavi SSH sono due chiavi crittograficamente sicure che possono essere utilizzate per autenticare un client su un server SSH. Ogni coppia di chiavi è composta da una chiave pubblica e una chiave privata.

La chiave privata viene conservata dal client e deve essere tenuta assolutamente segreta. Qualsiasi compromissione della chiave privata consentirà all'attaccante di accedere ai server configurati con la chiave pubblica associata senza ulteriore autenticazione. Come ulteriore precauzione, la chiave può essere crittografata su disco con una passphrase.

La chiave pubblica associata può essere condivisa liberamente senza conseguenze negative. La chiave pubblica può essere utilizzata per crittografare i messaggi che solo la chiave privata può decrittografare. Questa proprietà viene utilizzata come metodo di autenticazione utilizzando la coppia di chiavi.

La chiave pubblica viene caricata su un server remoto a cui vuoi poter accedere con SSH. La chiave viene aggiunta a un file speciale all'interno dell'account utente a cui effettuerai l'accesso chiamato ~/.ssh/authorized_keys.

Quando un client tenta di autenticarsi utilizzando le chiavi SSH, il server può verificare se il client è in possesso della chiave privata. Se il client può dimostrare di possedere la chiave privata, viene generata una sessione di shell o viene eseguito il comando richiesto.

Passaggio 1: creazione di chiavi SSH

Il primo passo per configurare l'autenticazione della chiave SSH sul tuo server è generare una coppia di chiavi SSH sul tuo computer locale.

Per fare ciò, possiamo usare un'utilità speciale chiamata ssh-keygen, che è inclusa nella suite di strumenti OpenSSH standard. Per impostazione predefinita, questo creerà una coppia di chiavi RSA a 3072 bit.

Sul tuo computer locale, genera una coppia di chiavi SSH digitando:

  1. ssh-keygen
Output
Generating public/private rsa key pair. Enter file in which to save the key (/home/username/.ssh/id_rsa):

L'utility ti chiederà di selezionare una posizione per le chiavi che verranno generate. Per impostazione predefinita, le chiavi verranno archiviate nella directory ~/.ssh all'interno della home directory dell'utente. La chiave privata si chiamerà id_rsa e la chiave pubblica associata si chiamerà id_rsa.pub.

Di solito, in questa fase è meglio attenersi alla posizione predefinita. Ciò consentirà al client SSH di trovare automaticamente le chiavi SSH durante il tentativo di autenticazione. Se desideri scegliere un percorso non standard, inseriscilo ora, altrimenti premi INVIO per accettare il valore predefinito.

Se in precedenza avevi generato una coppia di chiavi SSH, potresti visualizzare un messaggio simile a questo:

Output
/home/username/.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.

Output
Created directory '/home/username/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again:

Successivamente, ti verrà chiesto di inserire una passphrase per la chiave. Si tratta di una passphrase facoltativa che può essere utilizzata per crittografare il file della chiave privata su disco.

Forse ti starai chiedendo quali vantaggi offre una chiave SSH se hai ancora bisogno di inserire una passphrase. Alcuni dei vantaggi sono:

  • La chiave SSH privata (la parte che può essere protetta da passphrase) non viene mai esposta sulla rete. La passphrase viene utilizzata solo per decrittografare la chiave sulla macchina locale. Ciò significa che la forzatura bruta basata sulla rete non sarà possibile contro la passphrase.
  • La chiave privata è conservata all'interno di una directory ristretta. Il client SSH non riconoscerà le chiavi private che non sono conservate in directory riservate. La chiave stessa deve inoltre disporre di autorizzazioni limitate (lettura e scrittura disponibili solo per il proprietario). Ciò significa che gli altri utenti del sistema non possono curiosare.
  • Qualsiasi utente malintenzionato che spera di decifrare la passphrase della chiave SSH privata deve già avere accesso al sistema. Ciò significa che avranno già accesso al tuo account utente o all'account root. Se ti trovi in questa posizione, la passphrase può impedire all'attaccante di accedere immediatamente agli altri tuoi server. Si spera che questo ti dia il tempo di creare e implementare una nuova coppia di chiavi SSH e rimuovere l'accesso dalla chiave compromessa.

Poiché la chiave privata non è mai esposta alla rete ed è protetta tramite i permessi dei file, questo file non dovrebbe mai essere accessibile a nessuno diverso da te (e dall'utente root). La passphrase funge da ulteriore livello di protezione nel caso in cui queste condizioni vengano compromesse.

Una passphrase è un'aggiunta facoltativa. Se ne immetti uno, dovrai fornirlo ogni volta che utilizzi questa chiave (a meno che tu non stia eseguendo un software agente SSH che memorizza la chiave decrittografata). Ti consigliamo di utilizzare una passphrase, ma se non desideri impostare una passphrase, puoi premere INVIO per ignorare questa richiesta.

Output
Your identification has been saved in /home/username/.ssh/id_rsa. Your public key has been saved in /home/username/.ssh/id_rsa.pub. The key fingerprint is: SHA256:CAjsV9M/tt5skazroTc1ZRGCBz+kGtYUIPhRvvZJYBs username@hostname The key's randomart image is: +---[RSA 3072]----+ |o ..oo.++o .. | | o o +o.o.+... | |. . + oE.o.o . | | . . oo.B+ .o | | . .=S.+ + | | . o..* | | .+= o | | .=.+ | | .oo+ | +----[SHA256]-----+

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 della chiave SSH per accedere.

Passaggio 2: copia di una chiave pubblica SSH sul server

Nota: una versione precedente di questo tutorial conteneva istruzioni per aggiungere una chiave pubblica SSH al tuo account DigitalOcean. Queste istruzioni sono ora disponibili nella sezione Chiavi SSH della nostra documentazione del prodotto DigitalOcean.

Esistono diversi modi per caricare la tua chiave pubblica sul tuo server SSH remoto. Il metodo che usi dipende in gran parte dagli strumenti che hai a disposizione e dai dettagli della tua configurazione attuale.

I seguenti metodi producono tutti lo stesso risultato finale. Il metodo più semplice e più automatizzato è descritto per primo e quelli che lo seguono richiedono passaggi manuali aggiuntivi. Dovresti seguirli solo se non sei in grado di utilizzare i metodi precedenti.

Copia della tua chiave pubblica usando ssh-copy-id

Il modo più semplice per copiare la tua chiave pubblica su un server esistente è utilizzare un'utilità chiamata ssh-copy-id. Per la sua semplicità, questo metodo è consigliato se disponibile.

Lo strumento ssh-copy-id è incluso nei pacchetti OpenSSH in molte distribuzioni, quindi potresti averlo già disponibile sul tuo sistema locale. Affinché questo metodo funzioni, devi attualmente disporre di un accesso SSH basato su password al tuo server.

Per utilizzare l'utilità, è necessario 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 è:

  1. ssh-copy-id username@remote_host

Potresti vedere un messaggio come questo:

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. Digita 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:

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 (la digitazione non verrà visualizzata 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>.

Vedrai un output simile a questo:

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 la sezione successiva.

Copiare la tua 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.

Possiamo farlo emettendo il contenuto della nostra chiave SSH pubblica sul nostro computer locale e inviandolo tramite una connessione SSH al server remoto. Dall'altro lato, possiamo assicurarci che la directory ~/.ssh esista sotto l'account che stiamo usando e quindi restituire il contenuto che abbiamo reindirizzato in un file chiamato authorized_keys all'interno di questa directory.

Useremo il simbolo di reindirizzamento >> per aggiungere il contenuto invece di sovrascriverlo. Questo ci consentirà di aggiungere chiavi senza distruggere le chiavi aggiunte in precedenza.

Il comando completo sarà simile a questo:

  1. cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Potresti vedere un messaggio come questo:

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. Digita yes e premi INVIO per continuare.

Successivamente, ti verrà chiesta la password dell'account a cui stai tentando di connetterti:

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. Passare alla sezione successiva se l'operazione ha avuto successo.

Copiare manualmente la chiave pubblica

Se non disponi di un accesso SSH basato su password al tuo server, dovrai eseguire la procedura sopra descritta manualmente.

Il contenuto del tuo file id_rsa.pub dovrà in qualche modo essere aggiunto a un file in ~/.ssh/authorized_keys sulla tua macchina remota.

Per visualizzare il contenuto della tua chiave id_rsa.pub, digita quanto segue nel tuo computer locale:

  1. cat ~/.ssh/id_rsa.pub

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

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

Accedi al tuo host remoto utilizzando qualsiasi metodo tu abbia a disposizione. Potrebbe trattarsi di una console basata sul Web fornita dal provider dell'infrastruttura.

Nota: se utilizzi un Droplet DigitalOcean, fai riferimento alla nostra documentazione della Console di ripristino nella documentazione del prodotto DigitalOcean.

Una volta che hai accesso al tuo account sul server remoto, dovresti assicurarti che la directory ~/.ssh sia stata creata. 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, usando questo:

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

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

Se funziona, puoi passare a testare la tua nuova autenticazione SSH basata su chiave.

Passaggio 3: autenticazione al server utilizzando le chiavi SSH

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

Il processo è per lo più lo stesso:

  1. 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 '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. Digita yes 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à richiesto di inserirla ora. Successivamente, verrà creata una nuova sessione shell per te con l'account sul sistema remoto.

In caso di successo, continua per scoprire come bloccare il server.

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 su questo server con accesso sudo. Questo passaggio bloccherà gli accessi basati su password, quindi è essenziale garantire che sarai ancora in grado di ottenere l'accesso amministrativo.

Una volta che le condizioni di cui sopra sono vere, accedi al tuo server remoto con le chiavi SSH, come root o con un account con privilegi sudo. 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. Rimuovere il commento dalla riga rimuovendo qualsiasi # all'inizio della riga 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. Per implementare effettivamente le modifiche che abbiamo appena apportato, è necessario riavviare il servizio.

Sulla maggior parte delle distribuzioni Linux, puoi eseguire il seguente comando per farlo:

  1. sudo systemctl restart ssh

Dopo aver completato questo passaggio, hai eseguito correttamente la transizione del tuo demone SSH in modo che risponda solo alle chiavi SSH.

Conclusione

Ora dovresti avere l'autenticazione basata su chiave SSH configurata e in esecuzione sul tuo server, che ti consente di accedere senza fornire una password dell'account. Da qui, ci sono molte direzioni in cui puoi dirigerti. Se desideri saperne di più su come lavorare con SSH, dai un'occhiata alla nostra guida agli elementi essenziali di SSH.