Imposta un accesso sicuro senza password al tuo server Ubuntu remoto usando le chiavi SSH
SSH è un protocollo di rete client-server sicuro che aiuta un computer client a connettersi e comunicare con un server remoto. La connessione SSH garantisce che i comandi che vengono digitati nel terminale vengano inviati al server remoto tramite un canale crittografato.
Esistono due tipi di meccanismi di autenticazione utilizzati per connettersi al server remoto, l'autenticazione basata su password (soggetto ad attacchi Brute-force) e l'autenticazione basata su chiavi SSH (che è molto sicura).
Nell'autenticazione basata su chiave SSH, viene generata una coppia di chiavi sul computer client, denominata chiave pubblica e chiave privata. Una copia di questa chiave pubblica è resa disponibile sul server remoto. Quando un client invia una richiesta di connessione al server, il server genera una stringa casuale e la crittografa utilizzando la chiave pubblica. Questa stringa può essere decrittografata solo utilizzando la chiave privata disponibile sul computer client. Questo metodo garantisce l'accesso al server solo da parte dei client che contengono la chiave privata.
In questa guida vedremo come configurare le chiavi SSH sul server Ubuntu 20.04 LTS.
Verifica se hai una chiave SSH esistente sul tuo computer
Per verificare se esiste già una coppia di chiavi SSH sul tuo computer, digita questo comando nel tuo terminale.
ls -l ~/.ssh/id_*.pub
Se il comando precedente restituisce no such file or directory
o no matches found
, significa che la coppia di chiavi SSH non esiste.
Se disponi di una coppia di chiavi SSH esistente, puoi utilizzare la stessa coppia di chiavi per accedere a due server remoti oppure puoi anche creare una coppia di chiavi diversa con un nome diverso. Passiamo al passaggio successivo e vediamo come generare chiavi SSH per entrambi i casi.
Creazione di chiavi SSH su un computer client
Per generare una nuova coppia di chiavi SSH sul tuo computer, digita il comando come mostrato di seguito.
ssh-keygen
Per impostazione predefinita, le chiavi SSH sono a 2048 bit. Per una maggiore sicurezza, se vuoi generare chiavi SSH con bit più alti, usa il seguente comando.
ssh-keygen -b 4096
Se il comando viene eseguito correttamente, sullo schermo verrà visualizzato il seguente messaggio.
generazione di una coppia di chiavi rsa pubblica/privata.
Inserisci il file in cui salvare la chiave (/home/harshit/.ssh/id_rsa):
Ora, se non disponi di una coppia di chiavi SSH esistente sul tuo computer Enter
, premi semplicemente , ma se disponi di una chiave SSH esistente, salva la chiave con un nome file diverso come mostrato di seguito.
Inserisci il file in cui salvare la chiave (/home/tuo_nome/.ssh/id_rsa): /home/tuo_nome/.ssh/id_rsa_xxx
Sostituire xxx
alla fine del nome del file con un nome appropriato, come mostrato di seguito e premere Enter
.
Inserisci il file in cui salvare la chiave (/home/tuo_nome/.ssh/id_rsa): /home/tuo_nome/.ssh/id_rsa_client_1
Il prossimo prompt ti chiederà di inserire una passphrase di lunghezza arbitraria, garantirà una sicurezza a due livelli sul tuo dispositivo.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
L'inserimento di questa passphrase assicurerà che anche se una persona ottiene l'accesso alla tua chiave privata, non sarà in grado di accedere al tuo server remoto senza questa passphrase.
Una volta completato l'intero processo, sullo schermo viene visualizzato il seguente messaggio.
Le chiavi SSH sono state generate sul tuo sistema. Ora è il momento di copiare la chiave pubblica sul server remoto.
Copiare la chiave pubblica sul server Ubuntu remoto
Il metodo più semplice e veloce per copiare la chiave pubblica sul server remoto consiste nell'utilizzare l' ssh-copy-id
utilità. Ma se questa utility non è disponibile sul tuo computer per qualche motivo, puoi anche utilizzare altri metodi forniti in questa sezione.
Utilizzo dell'utilità ssh-copy-id
L' ssh-copy-id
utilità è disponibile per impostazione predefinita sul tuo computer Ubuntu che copia la chiave pubblica dal tuo dispositivo nella directory appropriata del tuo computer Ubuntu remoto.
Per copiare la chiave pubblica ssh, digita semplicemente il comando nel tuo terminale, come mostrato di seguito.
ssh-copy-id [email protected]
Sostituisci username
e hostname
nel comando precedente con il nome utente e il nome host del tuo server.
Il seguente messaggio apparirà sul tuo terminale se ti stai connettendo al tuo host per la prima volta, digita yes
e premi Enter
.
Impossibile stabilire l'autenticità dell'host "172.105.XX.XX (172.105.XX.XX)".
L'impronta digitale della chiave ECDSA è xx:xx:xx:xx:77:fe:73:xx:xx:55:00:ad:d6:xx:xx:xx.
Sei sicuro di voler continuare a connetterti (sì/no)? sì
Ora l' ssh-copy-id
utility cercherà il file con il nome id_rsa.pub
che contiene la chiave SSH pubblica. Una volta completato il processo di scansione, ti verrà chiesto di inserire la password del tuo server remoto, come mostrato di seguito. Digita la password e premi Enter
.
/usr/bin/ssh-copy-id: INFO: tentativo di accedere con le nuove chiavi, per filtrare quelle già installate
/usr/bin/ssh-copy-id: INFO: 1 chiave(e) rimane(e) da installare -- se ti viene chiesto ora è di installare le nuove chiavi
La password di [email protected] :
Una volta aggiunta la chiave, il seguente messaggio apparirà sul tuo terminale come output.
Numero di chiavi aggiunte: 1
Ora prova ad accedere alla macchina, con: "ssh ' [email protected] '" e controlla per assicurarti che siano state aggiunte solo le chiavi che desideri.
Nel caso tu abbia più chiavi SSH sul tuo computer client, per copiare la chiave pubblica appropriata sul tuo computer remoto, digita il comando nel modello mostrato di seguito.
ssh-copy-id -i id_rsa_xxx.pub [email protected]
Suggerimento
Non dimenticare di mettere .pub alla fine del nome del file mentre digiti nel terminale.
Copia della chiave pubblica con il metodo delle tubazioni
Digitare il seguente comando nel terminale se l' ssh-copy-id
utilità non è disponibile. Questo comando può sembrare un po' più lungo ma funziona in modo appropriato.
cat ~/.ssh/id_rsa.pub | ssh [email protected]_ip_address "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
Sostituisci remote_username
e server_ip_address
con il tuo nome utente e indirizzo IP.
Se hai più chiavi SSH disponibili sul tuo computer, sostituisci il file id_rsa.pub
con la chiave SSH pubblica di tua scelta. Ad esempio, id_rsa_client_1.pub
.
Digitare la password dell'utente remoto quando richiesto e premere Enter
.
[email protected]'s password:
Una volta digitata la password, il id_rsa.pub
file verrà copiato nel authorized_keys
file del server remoto.
Copia manuale della chiave pubblica
Utilizzare questo metodo quando non si ha accesso al sistema remoto tramite l'autenticazione con password.
Apri il id_rsa.pub
file usando il cat
comando nel terminale. Puoi anche aprirlo da un editor di testo, lo scopo è solo quello di copiare il contenuto del file.
cat ~/.ssh/id_rsa.pub
Il contenuto del file sarà simile a quello mostrato di seguito.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQComjFtuHvHQ67uf3RXg2wgK4EtxBvBvLCtlc4chG + nJ1cbuJjJ6G8az4xsRN1Q7hrV4dYR81Tk3gRApiMdGcMvInU3Vb7Wq3nh9GS4xnLRH1wvb149wogum2MycIES69Xh0cib + VvJyZ + dGO8zRNT64 + SvfiecRV0llnBGWDRqrIGtMHJkKz7VDKuSyzDit / Ck1NFXxC6Plw3cEMOhWHycm8bnSHSoVpr95ySxxnokX4 / 9iAlvOovxTpMpmDaDvuHKgHxcsOv9Q4sz // 6HY / 65 + qqmiuLyuIQXjDiiYTjHTx + VNi6S0iMLoN6XgDLp0MfG6kLvZ0Z + csqdvIDQfMuH [email protected] _PC
Ora accedi al tuo server remoto e incolla il contenuto copiato usando il comando mostrato di seguito. Sostituisci il above_string
con il contenuto copiato.
echo above_string >> ~/.ssh/authorized_keys
Configurazione di più chiavi SSH (opzionale)
Questo passaggio è per le persone che hanno la configurazione di più chiavi SSH sul proprio computer client. Salta questa sezione se hai una sola configurazione della chiave SSH.
Per gestire più chiavi SSH, ora creeremo un config
file all'interno della .ssh
directory utilizzando il comando mostrato di seguito.
cd ~/.ssh
vim config
Digita i
per entrare in modalità comando e digita i dettagli di più host, come mostrato nell'esempio seguente:
Host remote-ubuntu-server
HostName 172.105.XX.XX
User root
IdentityFile ~/.ssh/id_rsa_client_1
Host remote-ubuntu-server
HostName 172.106.XX.XX
User root
IdentityFile ~/.ssh/id_rsa_client_2
Allo stesso modo, digita i dettagli di altri server remoti e le loro chiavi. Una volta completato il processo, premere Esc
e :wq
per salvare ed uscire.
Ora i processi successivi sono gli stessi per avere chiavi SSH singole o multiple sul computer client.
Accedi al tuo server remoto usando le chiavi SSH
Una volta completato il processo di copia della tua chiave pubblica, accedi al tuo server remoto digitando il comando come mostrato di seguito.
ssh [email protected]_ip_address
Se hai fornito la passphrase durante la generazione della coppia di chiavi, ti verrà chiesto di inserirla. Una nuova sessione si aprirà al termine del processo di autenticazione.
Ora hai configurato correttamente l'autenticazione basata su chiavi SSH sul tuo server remoto. Ma l'autenticazione basata su password è ancora attiva sul tuo server, questo significa che il tuo server remoto è ancora soggetto ad attacchi di forza bruta.
Quindi ora disattiveremo completamente il meccanismo di accesso basato su password dal nostro server remoto.
Disabilita il meccanismo di accesso basato su password
Prima di apportare modifiche, assicurati che l'utente root o qualsiasi utente abilitato a sudo per il tuo account remoto abbia accesso al tuo server utilizzando il sistema di autenticazione basato su chiave SSH. Questo passaggio bloccherà o disabiliterà completamente l'accesso basato su password, quindi è fondamentale che almeno un utente con privilegi di root abbia accesso al server tramite la chiave SSH.
Accedi al tuo server Ubuntu remoto e digita il comando mostrato di seguito.
sudo vim /etc/ssh/sshd_config
- Press
Esc
, /
e il tipo di 'PasswordAuthentication' e successo enter
.
- Ora premi
i
e modifica il valore di "PasswordAuthentication yes" in "PasswordAuthentication no".
- Premi
Esc
e ripeti la procedura sopra per trovare "ChallengeResponseAuthentication", "UsePAM" e modifica anche i loro valori no
.
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
Una volta che tutti i valori sono impostati su no
, premere Esc
, digitare :wq
e premere enter
.
Per attivare tutte le modifiche riavviare il ssh
servizio utilizzando il comando sottostante.
sudo systemctl restart ssh
Ora apri una nuova finestra di terminale sul tuo computer e verifica che l'autenticazione della tua chiave SSH funzioni correttamente prima di chiudere la sessione corrente.
Una volta completato il processo di verifica, chiudi tutte le sessioni in esecuzione.
Ora abbiamo configurato con successo l'autenticazione basata su chiave SSH sul nostro server Ubuntu 20.04. Ora nessuno può accedere al tuo server utilizzando un meccanismo di accesso basato su password.