GNU/Linux >> Linux Esercitazione >  >> Linux

SSH senza password che utilizza coppie di chiavi pubblica-privata

Se interagisci regolarmente con i comandi SSH e gli host remoti, potresti scoprire che usare una coppia di chiavi invece delle password può essere conveniente. Invece del sistema remoto che richiede una password per ogni connessione, l'autenticazione può essere negoziata automaticamente utilizzando una coppia di chiavi pubblica e privata.

La chiave privata rimane al sicuro sulla tua workstation e la chiave pubblica viene collocata in una posizione specifica su ogni sistema remoto a cui accedi. La tua chiave privata potrebbe essere protetta localmente con una passphrase. Un programma di memorizzazione nella cache locale come ssh-agent o gnome-keyring ti consente di inserire quella passphrase periodicamente, invece di ogni volta che usi la chiave per accedere a un sistema remoto.

[ Download gratuito:cheat sheet dei comandi avanzati di Linux. ]

Generazione di una coppia di chiavi e propagazione della chiave pubblica

Generare la tua coppia di chiavi e propagare la tua chiave pubblica è più semplice di quanto sembri. Esaminiamolo.

Generazione della chiave

Lo sforzo minimo per generare una coppia di chiavi implica l'esecuzione di ssh-keygen comando e scegliendo i valori predefiniti a tutti i prompt:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/training/.ssh/id_rsa): 
Created directory '/home/training/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/training/.ssh/id_rsa.
Your public key has been saved in /home/training/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:qOoqJFfbfnBFMZ6WFsZQZfy6WXTfcknQEd0B+quTjHw [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|        .+*+o.o+*|
|         oo*o. .o|
|         .*. ..  |
|    .  . o. . o..|
|   . o. S.   +..+|
|... ..o .   . +.+|
|o.  .. o. o .= o |
|.  .  . .o E+    |
|ooo    .  ...    |
+----[SHA256]-----+

La posizione predefinita in cui archiviare le chiavi è in ~/.ssh directory, che verrà creata se non esiste:

$ ls -al .ssh
total 16
drwx------. 2 training training 4096 Aug 12 07:43 .
drwx------. 5 training training 4096 Aug 12 07:43 ..
-rw-------. 1 training training 1843 Aug 12 07:43 id_rsa
-rw-r--r--. 1 training training  415 Aug 12 07:43 id_rsa.pub

Consentire a questo comando di creare la directory garantisce anche che il proprietario e le autorizzazioni siano impostati correttamente. Alcune applicazioni non utilizzeranno le chiavi se le autorizzazioni per la chiave privata sono troppo aperte.

Il file che termina con .pub è la chiave pubblica che deve essere trasferita ai sistemi remoti. È un file contenente un'unica riga:il protocollo, la chiave e un'e-mail utilizzata come identificatore. Opzioni per ssh-keygen comando consente di specificare un identificatore diverso:

$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZ4SCcMX1EK31G/qLyCs3PaFcWkx0QA61OwQNHYztvrg7iD/etN4S5UP6ugHjTcUvqD/fZJFBJeryK0Hz0FzejKYiJBxQuUqadyXFSW30VnW6mAzgNoz20rGc2mipUrsaqdBWWv5U7vX8sgjEHEgVHzq6pfWj681PtikJ8Dss1IvPiPvOoRz2jb1dQnnrAVqMDGeWbm4yjYQamPvnLo1Hy23NgXpZ7KXv9PuDDu3tqcoMUqFk7sHswMrCCUY9SWOD5JBbhD3JX4LPs68WWbETOqOQ3a9ebTsL3wRPSbuu/djhL9Qmd8fN2OaM2U2zFpeE3NzBq4KT/ml6RTv44EMuh [email protected]

Dopo aver generato la coppia di chiavi, il ssh-keygen Il comando visualizza anche l'impronta digitale e l'immagine randomart che sono univoche per questa chiave. Queste informazioni possono essere condivise con altre persone che potrebbero aver bisogno di verificare la tua chiave pubblica.

Successivamente potrai visualizzarli con:

$ ssh-keygen -lv
Enter file in which the key is (/home/training/.ssh/id_rsa): 

Il -l l'opzione elenca l'impronta digitale e il -v l'opzione aggiunge l'art. ASCII

Propagazione della chiave pubblica a un sistema remoto

Se l'autenticazione tramite password è attualmente abilitata, il modo più semplice per trasferire la chiave pubblica all'host remoto è con ssh-copy-id comando. Se hai utilizzato il nome predefinito per la chiave, tutto ciò che devi specificare è l'utente e l'host remoti:

$ ssh-copy-id susan@streamer
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/training/.ssh/id_rsa.pub"
/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
susan@streamer's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'susan@streamer'"
and check to make sure that only the key(s) you wanted were added.

Seguendo le istruzioni dell'output, verifica di poterti connettere utilizzando la coppia di chiavi. Se hai implementato una passphrase, ti verrà chiesto di inserire la passphrase per utilizzare la chiave privata:

$ ssh susan@streamer
Last login: Sat Aug 10 14:09:33 2019 from X.X.X.X

Esaminare il file della chiave autorizzato risultante. Qui è dove è stata aggiunta la chiave pubblica. Se la directory o il file non esisteva, è stato (o è stato) creato con la proprietà e le autorizzazioni corrette. Ogni riga è una singola chiave pubblica autorizzata:

[susan@streamer ~]$ cat .ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZ4SCcMX1EK31G/qLyCs3PaFcWkx0QA61OwQNHYztvrg7iD/etN4S5UP6ugHjTcUvqD/fZJFBJeryK0Hz0FzejKYiJBxQuUqadyXFSW30VnW6mAzgNoz20rGc2mipUrsaqdBWWv5U7vX8sgjEHEgVHzq6pfWj681PtikJ8Dss1IvPiPvOoRz2jb1dQnnrAVqMDGeWbm4yjYQamPvnLo1Hy23NgXpZ7KXv9PuDDu3tqcoMUqFk7sHswMrCCUY9SWOD5JBbhD3JX4LPs68WWbETOqOQ3a9ebTsL3wRPSbuu/djhL9Qmd8fN2OaM2U2zFpeE3NzBq4KT/ml6RTv44EMuh [email protected]

Per revocare l'accesso a questa coppia di chiavi, rimuovi la riga della chiave pubblica.

Ci sono molte altre opzioni che possono essere aggiunte a questa riga nel file della chiave autorizzata per controllare l'accesso. Queste opzioni vengono solitamente utilizzate dagli amministratori che inseriscono le chiavi pubbliche in un sistema con restrizioni. Queste restrizioni possono includere l'origine della connessione, i comandi che possono essere eseguiti e persino una data che indica quando interrompere l'accettazione di questa chiave. Queste e altre opzioni sono elencate in sshd pagina man.

Cambiare la passphrase

Se devi modificare una passphrase sulla tua chiave privata o se inizialmente hai impostato una passphrase vuota e desideri quella protezione in un secondo momento, usa ssh-keygen comando con il -p opzione:

$ ssh-keygen -p
Enter file in which the key is (/home/training/.ssh/id_rsa): 
Key has comment '[email protected]'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

Puoi aggiungere ulteriori opzioni per specificare la chiave (-f ) e il vecchio (-P ) o nuovo (-N ) passphrase sulla riga di comando. Ricorda che tutte le password specificate nella riga di comando verranno salvate nella cronologia della shell.

Vedi il ssh-keygen pagina man per ulteriori opzioni.

Chiavi rotanti

Sebbene la chiave pubblica di per sé debba essere condivisa, tieni presente che se qualcuno ottiene la tua chiave privata, può utilizzarla per accedere a tutti i sistemi che dispongono della chiave pubblica. Queste coppie di chiavi inoltre non hanno un periodo di validità come le chiavi GNU Privacy Guard (GPG) oi certificati PKI (Public Key Infrastructure).

Se hai motivo di sospettare che una chiave privata sia stata rubata o altrimenti compromessa, dovresti sostituire quella coppia di chiavi. La vecchia chiave pubblica deve essere rimossa da tutti i sistemi, una nuova chiave deve essere generata con ssh-keygen , e la nuova chiave pubblica deve essere trasferita ai sistemi remoti desiderati.

Se stai ruotando le chiavi per precauzione e senza alcuna preoccupazione di compromissione, puoi utilizzare la vecchia coppia di chiavi per autenticare il trasferimento della nuova chiave pubblica prima di rimuovere la vecchia chiave.

Utilizzare passphrases vuote è mai una buona idea?

Ci sono diverse cose a cui pensare quando si considera una passphrase vuota per la chiave privata SSH.

Quanto è sicuro il file della chiave privata?

Se tendi a lavorare da più sistemi client e desideri avere più copie della tua chiave o conservarne una copia su un supporto rimovibile, allora è davvero una buona idea avere una passphrase sulla chiave privata. Questa pratica è in aggiunta alla protezione dell'accesso al file della chiave con un supporto crittografato.

Tuttavia, se hai solo una copia della chiave privata ed è conservata su un sistema ben protetto e non condiviso, avere una passphrase è semplicemente un ulteriore livello di protezione per ogni evenienza.

Ricorda che la modifica della passphrase su una copia non modifica la passphrase su altre copie. La passphrase sta semplicemente bloccando l'accesso a un file chiave specifico.

Perché pensi di aver bisogno di una passphrase vuota?

Esistono casi per chiavi con passphrase vuote. Alcune utilità che devono trasferire automaticamente i file tra i sistemi richiedono un metodo senza password per l'autenticazione. Il kdump l'utilità, se configurata per eseguire il dump del kernel su un sistema remoto utilizzando SSH, è un esempio.

Un altro uso comune è generare una coppia di chiavi per uno script progettato per l'esecuzione automatica, ad esempio da un processo cron.

Che ne dici di un'alternativa di mezzo?

Di per sé, una chiave privata protetta da passphrase richiede che la passphrase venga inserita ogni volta che viene utilizzata la chiave. Questa configurazione non sembra SSH senza password. Tuttavia, esistono meccanismi di memorizzazione nella cache che ti consentono di inserire la passphrase della chiave una volta e quindi di utilizzare la chiave più e più volte senza reinserire quella passphrase.

OpenSSH viene fornito con un ssh-agent demone e un ssh-add utility per memorizzare nella cache la chiave privata sbloccata. Il desktop GNOME ha anche un demone portachiavi che memorizza password e segreti ma implementa anche un agente SSH.

La durata della chiave memorizzata nella cache può essere configurata con ciascuno degli agenti o quando viene aggiunta la chiave. In molti casi, l'impostazione predefinita è una durata illimitata, ma la cache viene cancellata quando l'utente si disconnette dal sistema. Ti verrà richiesta la passphrase solo una volta per sessione di accesso.

Se è presente un'applicazione pianificata che deve essere eseguita al di fuori di una sessione di accesso utente, potrebbe essere possibile utilizzare un segreto o un altro gestore di password per automatizzare lo sblocco della chiave. Ad esempio, Ansible Tower archivia le credenziali in un database sicuro. Questo database include una chiave privata SSH utilizzata per connettersi ai sistemi remoti (nodi gestiti) e tutte le passphrase necessarie per tali chiavi private. Una volta che tali credenziali sono state archiviate, è possibile pianificare un processo per eseguire un playbook in base a una pianificazione regolare.

Automatizzazione della propagazione

Un gestore di identità centralizzato come FreeIPA può aiutare con la propagazione delle chiavi. Carica la chiave pubblica sul server come attributo di un account utente, quindi propagala agli host nel dominio secondo necessità. FreeIPA può anche fornire un ulteriore controllo dell'accesso basato sull'host per dove può essere utilizzata una chiave.

Le chiavi possono anche essere distribuite utilizzando i moduli Ansible. Il openssh_keypair il modulo usa ssh-keygen per generare chiavi e la authorized_key il modulo aggiunge e rimuove le chiavi autorizzate SSH per determinati account utente.

Conclusione

Le coppie di chiavi SSH sono solo un modo per automatizzare l'autenticazione senza password. L'utilizzo dell'autenticazione GSSAPI (Generic Security Services Application Program Interface) è comune anche quando si tenta di ridurre l'uso delle password su una rete con gestione utenti centralizzata. Le coppie di chiavi SSH sono l'opzione più semplice da implementare quando il Single Sign-On (SSO) non è già disponibile.

Molti repository di codice sorgente concedono l'accesso utilizzando le chiavi SSH. Puoi caricare una chiave pubblica su un account nell'organizzazione di hosting come i siti Fedora Account System, GitLab o GitHub e utilizzare quella coppia di chiavi per autenticarti durante il pull e il push dei contenuti nei repository.


Linux
  1. Connettiti a un server utilizzando SSH su Linux o Mac OS X

  2. Gestisci le coppie di chiavi SSH per i server cloud con python-novaclient

  3. Come funziona SSH senza password in Linux / UNIX

  4. Come evitare che ssh richieda la passphrase della chiave per gli accessi senza password

  5. Utilizzo della stessa chiave privata SSH su più macchine

Come configurare l'accesso senza password SSH in AlmaLinux

Configura l'accesso SSH senza password per più server remoti utilizzando lo script

Come impostare l'autenticazione basata su chiave Ssh per Github utilizzando il file ~/.ssh/config?

Accesso SSH senza password in 3 semplici passaggi

Come generare e utilizzare una chiave SSH utilizzando PuTTY

Genera chiavi RSA con SSH usando PuTTYgen