Come impostare le chiavi SSH su CentOS 7

Introduzione

SSH, o secure shell, è un protocollo criptato usato per amministrare e comunicare con i server. Quando si lavora con un server CentOS, è probabile che si passi la maggior parte del tempo in una sessione terminale collegata al server attraverso SSH.

In questa guida, ci concentreremo sulla configurazione delle chiavi SSH per un’installazione vanilla di CentOS 7. Le chiavi SSH forniscono un modo semplice e sicuro per accedere al vostro server e sono raccomandate per tutti gli utenti.

Passo 1 – Creare la coppia di chiavi RSA

Il primo passo è quello di creare una coppia di chiavi sulla macchina client (di solito il tuo computer):

  • ssh-keygen

Di default, ssh-keygen creerà una coppia di chiavi RSA a 2048 bit, che è abbastanza sicura per la maggior parte dei casi (puoi opzionalmente passare il flag -b 4096 per creare una chiave più grande a 4096 bit).

Dopo aver inserito il comando, dovresti vedere il seguente prompt:

Output
Generating public/private rsa key pair.Enter file in which to save the key (/your_home/.ssh/id_rsa):

Premi ENTER per salvare la coppia di chiavi nella sottodirectory .ssh/ della tua home directory, o specifica un percorso alternativo.

Se avevi precedentemente generato una coppia di chiavi SSH, potresti vedere il seguente prompt:

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

Se scegli di sovrascrivere la chiave su disco, non sarai più in grado di autenticarti usando la chiave precedente. Fate molta attenzione quando selezionate yes, poiché questo è un processo distruttivo che non può essere invertito.

Dovreste quindi vedere il seguente prompt:

Output
Enter passphrase (empty for no passphrase):

Qui potete opzionalmente inserire una passphrase sicura, che è altamente raccomandata. Una passphrase aggiunge un ulteriore livello di sicurezza per impedire agli utenti non autorizzati di accedere. Per saperne di più sulla sicurezza, consulta il nostro tutorial su Come configurare l’autenticazione basata su chiave SSH su un server Linux.

Dovresti quindi vedere il seguente output:

Output
Your identification has been saved in /your_home/.ssh/id_rsa.Your public key has been saved in /your_home/.ssh/id_rsa.pub.The key fingerprint is:a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 [email protected]_hostThe key's randomart image is:+------+| ..o || E o= . || o. o || .. || ..S || o o. || =o.+. ||. =++.. ||o=++. |+-----------------+

Ora hai una chiave pubblica e privata che puoi usare per autenticarti. Il prossimo passo è mettere la chiave pubblica sul tuo server in modo da poter usare l’autenticazione basata su chiave SSH per accedere.

Step 2 – Copiare la chiave pubblica sul server CentOS

Il modo più veloce per copiare la tua chiave pubblica sull’host CentOS è usare un’utilità chiamata ssh-copy-id. A causa della sua semplicità, questo metodo è altamente raccomandato se disponibile. Se non avete ssh-copy-id a disposizione sulla vostra macchina client, potete usare uno dei due metodi alternativi forniti in questa sezione (copiare via SSH con password o copiare manualmente la chiave).

Copiare la vostra chiave pubblica usando ssh-copy-id

Lo strumento ssh-copy-id è incluso di default in molti sistemi operativi, quindi potreste averlo disponibile sul vostro sistema locale. Affinché questo metodo funzioni, devi già avere un accesso SSH basato su password al tuo server.

Per usare l’utilità, devi solo specificare l’host remoto a cui vorresti connetterti e l’account utente a cui hai accesso SSH tramite password. Questo è l’account in cui la tua chiave SSH pubblica sarà copiata.

La sintassi è:

Potresti vedere il seguente messaggio:

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

Questo significa solo che il tuo computer locale non riconosce l’host remoto. Questo accadrà la prima volta che ti connetti a un nuovo host. Digita “sì” e premi ENTER per continuare.

Poi, l’utility farà una scansione del tuo account locale per la chiave id_rsa.pub che abbiamo creato prima. 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 [email protected]'s password:

Digita la password (la tua digitazione non sarà visualizzata per motivi di sicurezza) e premi ENTER. L’utility si connetterà all’account sull’host remoto usando la password che hai fornito. Quindi copierà il contenuto della tua chiave ~/.ssh/id_rsa.pub in un file nella directory ~/.ssh home dell’account remoto chiamato authorized_keys.

Dovresti vedere il seguente output:

Output
Number of key(s) added: 1Now try logging into the machine, with: "ssh '[email protected]'"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 al passo 3.

Copiare la chiave pubblica usando SSH

Se non hai ssh-copy-id a disposizione, ma hai un accesso SSH basato su password a un account sul tuo server, puoi caricare le tue chiavi usando un metodo SSH convenzionale.

Possiamo farlo usando il comando cat per leggere il contenuto della chiave pubblica SSH sul nostro computer locale e trasmetterlo attraverso una connessione SSH al server remoto.

Dall’altra parte, possiamo assicurarci che la directory ~/.ssh esista e abbia i permessi corretti sotto l’account che stiamo usando.

Possiamo quindi emettere il contenuto che abbiamo trasmesso 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 permetterà di aggiungere chiavi senza distruggere le chiavi precedentemente aggiunte.

Il comando completo assomiglia a questo:

  • cat ~/.ssh/id_rsa.pub | ssh [email protected]_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Potresti vedere il seguente messaggio:

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

Questo significa che il tuo computer locale non riconosce l’host remoto. Questo accadrà la prima volta che vi connettete a un nuovo host. Digita “sì” e premi ENTER per continuare.

In seguito, ti dovrebbe essere richiesto di inserire la password dell’account utente remoto:

Output
[email protected]'s password:

Dopo aver inserito la password, il contenuto della tua chiave id_rsa.pub sarà copiato alla fine del file authorized_keys dell’account dell’utente remoto. Continua al passo 3 se questo ha avuto successo.

Copiare la chiave pubblica manualmente

Se non hai a disposizione un accesso SSH basato su password al tuo server, dovrai completare il processo precedente manualmente.

Applicheremo manualmente il contenuto del tuo file id_rsa.pub al file ~/.ssh/authorized_keys sulla tua macchina remota.

Per visualizzare il contenuto della vostra chiave id_rsa.pub, digitate questo nel vostro computer locale:

  • cat ~/.ssh/id_rsa.pub

Vederete il contenuto della chiave, che dovrebbe essere simile a questo:

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== [email protected]

Accedete al vostro host remoto usando qualsiasi metodo abbiate a disposizione.

Una volta che hai accesso al tuo account sul server remoto, dovresti assicurarti che la directory ~/.ssh esista. Questo comando creerà la directory se necessario, o non farà nulla se esiste già:

  • mkdir -p ~/.ssh

Ora, potete 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 comando:

  • echo public_key_string >> ~/.ssh/authorized_keys

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

Infine, ci assicureremo che la directory ~/.ssh e il file authorized_keys abbiano i permessi appropriati:

  • chmod -R go= ~/.ssh

Questo rimuove ricorsivamente tutti i permessi “group” e “other” per la directory ~/.ssh/.

Se state usando l’account root per impostare le chiavi per un account utente, è anche importante che la directory ~/.ssh appartenga all’utente e non a root:

  • chown -R sammy:sammy ~/.ssh

In questo tutorial il nostro utente si chiama sammy ma dovreste sostituire il nome utente appropriato nel comando precedente.

Possiamo ora tentare l’autenticazione senza password con il nostro server Ubuntu.

Passo 3 – Autenticare il tuo server CentOS usando le chiavi SSH

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

Il processo di base è lo stesso:

Se questa è la prima volta che ti connetti a questo host (se hai usato l’ultimo metodo sopra), potresti vedere qualcosa 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

Questo significa che il tuo computer locale non riconosce l’host remoto. Digita “yes” e poi premi ENTER per continuare.

Se non hai fornito una passphrase per la tua chiave privata, sarai loggato immediatamente. Se hai fornito una passphrase per la chiave privata quando l’hai creata, ti verrà richiesto di inserire la passphrase ora. Dopo l’autenticazione, una nuova sessione di shell dovrebbe aprirsi per te con l’account configurato sul server CentOS.

Se l’autenticazione basata sulla chiave ha avuto successo, continua ad imparare come proteggere ulteriormente il tuo sistema disabilitando l’autenticazione tramite password.

Step 4 – Disabilitare l’autenticazione tramite password sul tuo server

Se sei stato in grado di accedere al tuo account usando SSH senza una password, hai configurato con successo l’autenticazione basata sulla chiave SSH al 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 passi di questa sezione, assicurati di avere l’autenticazione basata su chiave SSH configurata per l’account di root su questo server, o preferibilmente, che hai l’autenticazione basata su chiave SSH configurata per un account non root su questo server con privilegi sudo. Questo passo bloccherà i login basati su password, quindi assicurarsi che sarete ancora in grado di ottenere l’accesso amministrativo è fondamentale.

Una volta confermato che il vostro account remoto ha privilegi amministrativi, accedete al vostro server remoto con le chiavi SSH, sia come root che con un account con privilegi sudo. Poi, aprite il file di configurazione del demone SSH:

  • sudo vi /etc/ssh/sshd_config

All’interno del file, cercate una direttiva chiamata PasswordAuthentication. Questa può essere commentata. Premi i per inserire il testo, e poi decommenta la linea e imposta il valore su “no”. Questo disabiliterà la vostra capacità di accedere via SSH usando le password degli account:

/etc/ssh/sshd_config
...PasswordAuthentication no...

Quando avete finito di fare i cambiamenti, premete ESC e poi :wq per scrivere i cambiamenti nel file e uscire. Per implementare effettivamente queste modifiche, dobbiamo riavviare il servizio sshd:

  • sudo systemctl restart sshd.service

Per precauzione, aprite una nuova finestra di terminale e verificate che il servizio SSH funzioni correttamente prima di chiudere questa sessione:

Una volta verificato il servizio SSH, potete tranquillamente chiudere tutte le attuali sessioni del server.

Il demone SSH sul tuo server CentOS ora risponde solo alle chiavi SSH. L’autenticazione basata su password è stata disabilitata con successo.

Conclusione

Ora dovresti avere l’autenticazione basata su chiave SSH configurata sul tuo server, permettendoti di accedere senza fornire la password di un account.

Se vuoi saperne di più su come lavorare con SSH, dai un’occhiata alla nostra guida SSH Essentials.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.