Introduzione
Autenticazione con chiave pubblica è un metodo di registrazione sicuro che utilizza SSH. Invece di una password, la procedura utilizza una coppia di chiavi crittografiche per la convalida. Sebbene l'utilizzo di una password complessa aiuti a prevenire attacchi di forza bruta, l'autenticazione a chiave pubblica fornisce forza crittografica e accessi automatizzati senza password.
Questa guida fornisce istruzioni dettagliate su come implementare l'autenticazione a chiave pubblica da zero.

Prerequisiti
- Accesso alla riga di comando/terminale con privilegi di amministratore.
- SSH abilitato. Segui le nostre guide per attivare SSH su Linux:Ubuntu 18.04, Debian 9 o 10.
- Un server locale e remoto.
Utilizzo della chiave SSH per l'autenticazione
L'autenticazione con chiave pubblica SSH prevede quattro passaggi:
1. Genera una chiave privata e una pubblica, nota come coppia di chiavi . La chiave privata rimane sul computer locale.
2. Aggiungi la chiave pubblica corrispondente al server.
3. Il server memorizza e contrassegna la chiave pubblica come approvata.
4. Il server consente l'accesso a chiunque dimostri la proprietà della chiave privata corrispondente.
Il modello presuppone che la chiave privata sia protetta. L'aggiunta di una passphrase per crittografare la chiave privata aggiunge un livello di sicurezza sufficientemente buono per la maggior parte dei casi basati sugli utenti. Ai fini dell'automazione, si applicano le pratiche e il software di gestione delle chiavi poiché la chiave privata rimane non protetta in caso contrario.
Generazione di una coppia di chiavi SSH
Genera la coppia di chiavi SSH sul server locale utilizzando OpenSSH. Le istruzioni di base per Linux, macOS e Windows sono descritte di seguito.
Linux e macOS
1. Apri il terminale (CTRL +ALT +T ).
2. Verifica la presenza di chiavi esistenti con:
ls -l ~/.ssh/id*
Se ci sono già delle chiavi, l'output mostra il contenuto della directory:

La generazione di nuove chiavi sovrascrive quelle correnti per impostazione predefinita. Tuttavia, l'indicazione di un nuovo nome per le chiavi le salva in file diversi.
Se non ci sono chiavi esistenti, l'output indica che la cartella non esiste:

3. Crea la directory usando il comando mkdir per memorizzare la nuova coppia di chiavi:
mkdir ~/.ssh
4. Modifica le autorizzazioni su 700:
chmod 700 ~/.ssh
5. Il seguente comando avvia il generatore di chiavi:
ssh-keygen
L'output stampa un messaggio che indica che il comando è stato eseguito correttamente. Successivamente, il programma chiede dove salvare il file:

La directory e il file predefiniti per l'archiviazione delle chiavi sono /home/
6. Infine, inserisci una passphrase per proteggere la chiave. Premi Invio e conferma ancora una volta la passphrase quando richiesto. La password viene richiesta ogni volta che utilizzi la chiave per l'autenticazione.

7. Infine, il programma stampa le informazioni su dove sono memorizzate le chiavi. Inoltre, anche una stampa digitale e una rappresentazione grafica sulla console.

8. Conferma che le chiavi sono nella directory controllando il contenuto:
ls -l ~/.ssh/

La directory ora contiene due file:
- id_rsa è la chiave privata.
- id_rsa.pub è la chiave pubblica.
Finestre
1. Utilizza la casella di ricerca di Windows per trovare cmd e apri la finestra del prompt dei comandi.
2. Nella richiesta, digitare:
ssh-keygen
Il comando avvia il programma per la generazione della coppia di chiavi.
3. Se imposti una posizione specifica per le chiavi, digita il percorso ora. Altrimenti, premi Invio per salvare le chiavi nel percorso predefinito.

Se le chiavi sono presenti in questa posizione, l'uscita chiede di confermare la sovrascrittura. Digita Y per confermare e premere Invio per continuare la configurazione.
4. Immettere la passphrase per crittografare la chiave privata. Reinserisci la stessa passphrase e premi Invio per completare la generazione della coppia di chiavi.

Configurazione di uno o più utenti SSH/SFTP per la tua chiave
Dopo aver generato una coppia di chiavi, il passaggio successivo consiste nel configurare la macchina server per gli utenti SSH e SFTP per la chiave.
1. Sulla macchina server, controlla se ~/.ssh cartella esiste:
ls -l ~/.ssh/
Se la directory non esiste, crea la cartella:
mkdir ~/.ssh
Quindi, modifica le autorizzazioni con:
chmod 700 ~/.ssh
2. Crea un file chiamato authorized_keys nel ~/.ssh directory:
touch authorized_keys
Modifica le autorizzazioni:
chmod 600 ~/.ssh/authorized_keys
3. Quindi, apri le chiavi_autorizzate file utilizzando un editor di testo. Copia il contenuto della chiave pubblica nelle authorized_keys file. Per più utenti e chiavi, copia ogni nuova chiave su una nuova riga. Salva il file e chiudi.
In Linux, usa questo comando per copiare automaticamente la chiave:
ssh-copy-id <username>@<host>

L'output mostra il numero di chiavi copiate automaticamente sul server insieme ad ulteriori istruzioni.
Per il trasferimento di file tramite SSH esistono più soluzioni:
- Utilizza SSHFS per Linux, macOS o Windows
- Utilizza RSync come alternativa a Linux.
Accesso
Dopo aver generato e copiato le chiavi, accedi al tuo server dalla macchina locale usando il seguente comando:
ssh <username>@<host>
Il comando fa apparire una richiesta per inserire la password della chiave privata:

Infine, inserisci la password per sbloccare la chiave:

Una volta verificato, il comando ti connette al server tramite SSH.
Perché dovresti usare l'autenticazione a chiave pubblica con SSH?
L'autenticazione con chiave pubblica è un modo più sicuro e consigliato per connettersi con SSH anziché con una normale password di accesso.
Alcuni vantaggi sono:
- La coppia di chiavi SSH è più difficile da hackerare. Poiché la maggior parte delle chiavi SSH è lunga almeno 1024 bit, che equivale a una password di 12 caratteri, la connessione è sicura. Per migliorare ulteriormente la sicurezza, aumentare il numero di bit durante la generazione delle chiavi.
- Il contenuto delle chiavi viene generato utilizzando un algoritmo informatico, rendendole più difficili da prevedere.
- Solo la macchina in cui risiede la chiave privata ha accesso.
- L'autenticazione con chiave pubblica non mostra mai il contenuto della chiave privata al server. In caso di compromissione del server, la macchina locale rimane al sicuro.
- Una password aggiunta alla chiave privata aggiunge l'autenticazione a più fattori.