GNU/Linux >> Linux Esercitazione >  >> Linux

Come configurare l'autenticazione basata su chiave SSH in Linux

Questa guida spiega cos'è l'autenticazione basata su chiave SSH, i tipi di metodi di autenticazione SSH e, infine, come configurare l'autenticazione basata su chiave SSH nei sistemi operativi Linux e simili a Unix.

Che cos'è l'autenticazione basata su chiave SSH?

Come tutti sappiamo, Secure Shell , a breve SSH , è il protocollo di rete crittografica che consente di comunicare/accedere in modo sicuro a un sistema remoto su una rete non protetta, ad esempio Internet.

Ogni volta che invii dati su una rete non protetta utilizzando SSH, i dati verranno automaticamente crittografati nel sistema di origine e decrittografati nel lato di destinazione.

SSH fornisce quattro metodi di autenticazione, vale a dire autenticazione basata su passwordautenticazione basata su chiave , Autenticazione basata sull'host e Autenticazione da tastiera .

I metodi di autenticazione più comunemente utilizzati sono l'autenticazione basata su password e basata su chiave.

Nell'autenticazione basata su password, tutto ciò che serve è la password dell'utente del sistema remoto. Se conosci la password dell'utente remoto, puoi accedere al rispettivo sistema utilizzando "ssh [email protected]" comando.

D'altra parte, nell'autenticazione basata su chiave, è necessario generare coppie di chiavi SSH e caricare la chiave pubblica SSH sul sistema remoto per comunicarla tramite SSH.

Ogni coppia di chiavi SSH è composta da una chiave privata e una chiave pubblica. La chiave privata deve essere conservata all'interno del sistema client e la chiave pubblica deve essere caricata sui sistemi remoti. Non rivelare la chiave privata a nessuno .

Spero che tu abbia l'idea di base su SSH e sui suoi metodi di autenticazione. Ora configuriamo l'autenticazione basata su chiave SSH in Linux.

Configura l'autenticazione basata su chiave SSH in Linux

Ai fini di questa guida, utilizzerò il sistema Arch Linux come sistema locale e Ubuntu 18.04 LTS come sistema remoto.

Dettagli del sistema locale:

  • OS :desktop Arch Linux
  • Indirizzo IP :192.168.225.37 /24

Dettagli del sistema remoto:

  • OS :Server Ubuntu 18.04 LTS
  • Indirizzo IP :192.168.225.22/24

Genera coppia di chiavi SSH

Come già affermato, nel metodo di autenticazione basato su chiave SSH, la chiave pubblica deve essere caricata sul sistema remoto a cui si desidera accedere tramite SSH.

Le chiavi pubbliche vengono generalmente archiviate in un file chiamato ~/.ssh/authorized_keys nei sistemi SSH remoti.

Nota importante: Non generare coppie di chiavi come root , poiché solo root sarebbe in grado di utilizzare quelle chiavi. Crea coppie di chiavi come utente normale.

Ora creiamo la coppia di chiavi SSH nel sistema locale. Per farlo, esegui il seguente comando nel tuo sistema client locale.

$ ssh-keygen

Il comando precedente creerà una coppia di chiavi RSA a 2048 bit. Immettere la passphrase due volte. Ancora più importante, ricorda la tua passphrase. Ti servirà più tardi.

Risultato di esempio:

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

Nel caso in cui tu abbia già creato la coppia di chiavi, vedrai il seguente messaggio. Digita semplicemente "y" per sovrascrivere la chiave esistente.

/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?

Nota:

Tieni presente che la passphrase è facoltativa . Se ne dai uno, ti verrà chiesto di inserire la password ogni volta che provi a eseguire l'SSH in un sistema remoto, a meno che tu non stia utilizzando un agente SSH per memorizzare la password.

Se non vuoi la passphrase (non sicura però), premi semplicemente il tasto INVIO due volte quando ti viene chiesto di fornire la passphrase. Tuttavia, ti consiglio di utilizzare la passphrase.

L'uso di una chiave ssh senza password generalmente non è una buona idea dal punto di vista della sicurezza. Dovrebbero essere limitati a casi molto specifici come i servizi che devono accedere a un sistema remoto senza l'intervento dell'utente (es. backup remoti con rsync, unison, ...).

Se hai già una chiave ssh senza passphrase nel file privato ~/.ssh/id_rsa e si desidera aggiornare la chiave con passphrase, utilizzare il seguente comando:

$ ssh-keygen -p -f ~/.ssh/id_rsa

Risultato di esempio:

Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

Copia la chiave pubblica SSH su sistemi remoti

Abbiamo creato la coppia di chiavi nel sistema locale. Quindi, copia la chiave pubblica SSH sul tuo server SSH remoto usando il comando:

$ ssh-copy-id [email protected]

Qui copierò la chiave pubblica del sistema locale (Arch Linux) sul sistema remoto (Ubuntu 18.04 LTS nel mio caso).

Tecnicamente parlando, il comando precedente copierà il contenuto della chiave ~/.ssh/id_rsa.pub del sistema locale nei ~/.ssh/authorized_keys del sistema remoto file. Chiaro? Bene.

Digita per continuare a connetterti al tuo server SSH remoto, quindi inserisci la password sudo (o utente root) del sistema remoto.

/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
[email protected]'s password:

Number of key(s) added: 1

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

Se hai già copiato la chiave, ma desideri aggiornarla con una nuova passphrase, utilizza -f opzione per sovrascrivere la chiave esistente come di seguito.

$ ssh-copy-id -f [email protected]

Abbiamo aggiunto con successo la chiave pubblica SSH del sistema locale al sistema remoto.

Ora possiamo disabilitare completamente l'autenticazione basata su password nel sistema remoto. Perché abbiamo già configurato l'autenticazione basata su chiave, quindi non abbiamo più bisogno dell'autenticazione basata su password.

Disabilita l'autenticazione basata su password SSH nel sistema remoto

Devi eseguire i seguenti comandi come utente root o sudo.

Per disabilitare l'autenticazione basata su password, vai alla console del tuo sistema remoto e modifica /etc/ssh/sshd_config file di configurazione utilizzando qualsiasi editor:

$ sudo vi /etc/ssh/sshd_config

Trova la riga seguente. Decommentalo e imposta il suo valore su no .

PasswordAuthentication no

Riavvia il servizio ssh per rendere effettive le modifiche.

$ sudo systemctl restart sshd

Accedi al sistema remoto dal sistema locale

Vai al tuo sistema locale e SSH nel tuo server remoto usando il comando:

$ ssh [email protected]

Immettere la passphrase per accedere al sistema remoto.

Risultato di esempio:

Enter passphrase for key '/home/sk/.ssh/id_rsa': 
Last login: Mon Jul 9 09:59:51 2018 from 192.168.225.37
[email protected]:~$

Come hai notato, abbiamo effettuato l'accesso all'account del sistema remoto utilizzando la passphrase creata in precedenza utilizzando ssh-keygen comando, non utilizzando la password effettiva dell'account utente.

Se provi a eseguire ssh da un altro sistema client, visualizzerai questo messaggio di errore. Supponiamo, ad esempio, di aver provato a eseguire SSH nel mio sistema Ubuntu dal mio CentOS usando il comando:

$ ssh [email protected]

Risultato di esempio:

The authenticity of host '192.168.225.22 (192.168.225.22)' can't be established.
ECDSA key fingerprint is 67:fc:69:b7:d4:4d:fd:6e:38:44:a8:2f:08:ed:f4:21.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.225.22' (ECDSA) to the list of known hosts.
Permission denied (publickey).

Come puoi vedere nell'output sopra, non mi è stato permesso di accedere a SSH nei miei sistemi Ubuntu 18.04 remoti da altri sistemi.

Aggiunta di più chiavi di sistema client al server SSH

Questo è molto importante. Come ho già detto, non puoi accedere al sistema remoto tramite SSH, tranne quello che hai configurato (nel nostro caso è Ubuntu).

Voglio concedere le autorizzazioni a più client per accedere al server SSH remoto. Cosa dovrei fare? Semplice. Devi generare la coppia di chiavi SSH in tutti i tuoi sistemi client e copiare manualmente la chiave pubblica ssh sul server remoto a cui desideri accedere tramite SSH.

Per creare una coppia di chiavi SSH sui tuoi sistemi client, esegui:

$ ssh-keygen

Immettere la passphrase due volte. Dopo aver generato la coppia di chiavi, copia manualmente la chiave ssh pubblica (non privata) sul tuo server remoto.

Visualizza la chiave pub usando il comando:

$ cat ~/.ssh/id_rsa.pub

Dovresti vedere un output simile a quello di seguito.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCt3a9tIeK5rPx9p74/KjEVXa6/OODyRp0QLS/sLp8W6iTxFL+UgALZlupVNgFjvRR5luJ9dLHWwc+d4umavAWz708e6Na9ftEPQtC28rTFsHwmyLKvLkzcGkC5+A0NdbiDZLaK3K3wgq1jzYYKT5k+IaNS6vtrx5LDObcPNPEBDt4vTixQ7GZHrDUUk5586IKeFfwMCWguHveTN7ykmo2EyL2rV7TmYq+eY2ZqqcsoK0fzXMK7iifGXVmuqTkAmZLGZK8a3bPb6VZd7KFum3Ezbu4BXZGp7FVhnOMgau2kYeOH/ItKPzpCAn+dg3NAAziCCxnII9b4nSSGz3mMY4Y7 [email protected]

Copia l'intero contenuto (tramite unità USB o qualsiasi supporto) e vai alla console del tuo server remoto. Crea una directory chiamata ssh nella home directory come mostrato di seguito.

$ mkdir -p ~/.ssh

Quindi, aggiungi la chiave pub del tuo sistema client che hai generato nel passaggio precedente in un file chiamato "~/.ssh/authorized_keys" :

echo {Your_public_key_contents_here} >> ~/.ssh/authorized_keys

Riavvia il servizio ssh sul sistema remoto. Ora sarai in grado di inviare SSH al tuo server dal nuovo client.

Se l'aggiunta manuale di ssh pubkey sembra difficile, abilita temporaneamente l'autenticazione basata su password nel sistema remoto e copia la chiave usando il comando "ssh-copy-id" dal tuo sistema locale e infine disabilita l'autenticazione basata su password.

Lettura correlata:

  • Come configurare l'autenticazione a più fattori per SSH in Linux
  • Trova se un utente utilizza l'autenticazione SSH basata su password o chiave
  • SSLH:condividi una stessa porta per HTTPS e SSH
  • ScanSSH:server SSH veloce e scanner proxy aperto

Conclusione

L'autenticazione basata su chiave SSH fornisce un livello di protezione aggiuntivo dagli attacchi di forza bruta. Come puoi vedere, anche la configurazione dell'autenticazione basata su chiave non è così difficile. È uno dei metodi consigliati per mantenere i tuoi server Linux sicuri e protetti.


Linux
  1. Come generare una chiave SSH in Windows 10

  2. Come configurare le chiavi SSH usando cPanel

  3. Come modificare la porta SSH in Linux

  4. Configura le chiavi SSH sul sistema Debian 9 - Come farlo?

  5. Come funziona SSH senza password in Linux / UNIX

Come configurare la chiave pubblica e privata SSH in Linux

Come configurare le chiavi SSH su Debian 11 Linux

Come generare e utilizzare la chiave SSH nel sistema Linux?

come configurare l'autenticazione basata su chiave SSH in Linux VPS o server dedicato

Come disabilitare il controllo della chiave host SSH in Linux

Come installare, configurare e abilitare il servizio SSH in Linux