Cosa significa accesso tramite SSH
SSH (Secure SHell) è un protocollo che permette di stabilire una sessione remota cifrata tramite interfaccia a riga di comando con un altro host (tipicamente server) e che permetta facilmente di gestire file e directory o modificarne i permessi.
Cos’e’ una chiave SSH
La chiave SSH è un tipo di autenticazione basata su chiavi, utilizzata per l’accesso tramite SSH. E’ molto utilizzata in quanto è un metodo di accesso più sicuro rispetto all’autenticazione utente/password. La procedura prevede la generazione di una coppia di file; una chiave privata e una pubblica. La chiave pubblica verrà installata sull’ host a cui ci si dovrà collegare mentre la chiave privata è la chiave che ci permette il collegamento.
Creazione chiavi
Per prima cosa è necessario generare le chiavi. E’ possibile farlo con qualsiasi distribuzione Linux o anche direttamente su un host a cui ci collegheremo tramite chiavi.
Iniziamo la generazione aprendo un terminale ed eseguendo il comando ssh-keygen
ssh-keygen -t rsa
Ci verrà richiesto il nome e il percorso di destinazione dove verrà salvata la nostra coppia di chiavi (di default: /nomeutente/.ssh/id_rsa); inseriamolo o premiamo Invio
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Come ulteriore livello di sicurezza, ci verrà richiesta una password che si dovrà inserire ogni volta per poter accedere tramite chiave privata; inseriamola due volte (per conferma) o altrimenti premiamo due volte Invio per evitarla e passare allo step successivo
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Al termine della procedura le nostre chiavi sono state create
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:pznddwK+QCdzjWBEGQdn/lCXt1lY37TGWDjnnJuCiEg root@internautablog
The key’s randomart image is:
+—[RSA 2048]—-+
| .=++ o+=|
| ..= +==*|
| o o.=+O|
| E . . =.* |
| . . S * * o o|
| . . B O o o |
| + o o + .|
| . . o o |
| . |
+—-[SHA256]—–+
Infatti nel percorso scelto (nel mio caso /root/.ssh/) saranno presenti due files id_rsa e id_rsa.pub
[root@internautablog .ssh]# ll
total 8
-rw——- 1 root root 1679 Mar 17 16:25 id_rsa
-rw-r–r– 1 root root 401 Mar 17 16:25 id_rsa.pub
Configurazione host a cui collegarsi
Ora vedremo come configurare l’host di destinazione su cui ci colleghermo tramite chiavi. Per questa procedura è necessario avere il file id_rsa.pub a portata di mano
Apriamo un terminale sull’host selezionato
Andiamo nella directory /utente/.ssh (nel mio caso /root/.ssh)
cd /root/.ssh
Se non dovesse esistere, creiamo il file authorized_keys
vi authorized_keys
Apriamo o stampiamo parallelamente con un’editor il file id_rsa.pub creato precedentemente; il contenuto sarà del tipo
[root@internautablog .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCkW9MoGcfVjUeNzaMxc6etaOX+3qE4+k1wY15E6J5454V21wLrYgkIZnJn6VdPEKKGYLXBieGrvK6fkwIRTdOFyKX7zqtKmkaPbdDafPTq/9QHLFaPMJuhrvBiVHIRCuvM1w/CpS5VTXb7uaJet5WSkyv7rzOeNz6vuL9s1Upwl2mR08PtyEEJtiVpuSH9mlIhYKPMKzX7nhvjoIZnbVh1cmXs7SmpcJ0HERYqt6PFxGk68wOo7sjXtCwNmpwCyuPvYAOTakmq/PW4YOakG/df30oVJXv3rHbDHiRXLn3ILfeC1fe0doxg4YDxXDDFynPv4IckvMXOnwjW/gBSXDdt root@internautablog.it
Ora non ci resta che copiare questo testo all’interno del file authorized_keys
Premiamo il tasto i per abilitare l’immissione del testo e incolliamo.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCkW9MoGcfVjUeNzaMxc6etaOX+3qE4+k1wY15E6J5454V21wLrYgkIZnJn6VdPEKKGYLXBieGrvK6fkwIRTdOFyKX7zqtKmkaPbdDafPTq/9QHLFaPMJuhrvBiVHIRCuvM1w/CpS5VTXb7uaJet5WSkyv7rzOeNz6vuL9s1Upwl2mR08PtyEEJtiVpuSH9mlIhYKPMKzX7nhvjoIZnbVh1cmXs7SmpcJ0HERYqt6PFxGk68wOo7sjXtCwNmpwCyuPvYAOTakmq/PW4YOakG/df30oVJXv3rHbDHiRXLn3ILfeC1fe0doxg4YDxXDDFynPv4IckvMXOnwjW/gBSXDdt root@internautablog.it
~
~— INSERT —
Salviamo e chiudiamo il file premendo il tasto ESC e, in seguito, :x!
Ora il file authorized_keys contiene la nostra chiave pubblica
Test di connessione
Proviamo ora a collegarci tramite la chiave privata;
Apriamo un terminale ed effettuiamo la connessione (se avessimo inserito una password durante la creazione delle chiavi, dovrete inserirla quando richiesto)
ssh -i percorsoChiavePrivata root@host
Se tutto è stato configurato correttamente ci troveremo davanti alla riga di comando
[root@internautablog ~]#
Abilitare l’accesso solo tramite chiavi
Una volta testata la corretta configurazione e connessione tramite chiavi, è consigliato di disattivare la possibilità di autenticazione tramite utente/password e permettere l’accesso solo tramite chiavi.
Una volta connessi all’host di destinazione, è necessario modificare il file di configurazione dell’SSH
vi /etc/ssh/sshd_config
Cerchiamo la riga
PasswordAuthentication yes
e modifichiamola in
PasswordAuthentication no
Non ci resta che riavviare il servizio SSH con il comando
systemctl restart sshd.service
Se ora tentaste di collegarvi senza chiavi all’host di destinazione dovrestre riscontrare il seguente errore
No supported authentication methods available (server sent: publickey,gssapi-keyex,gssapi-with-mic)
Il che significa che l’accesso consentito all’host è solo tramite chiavi
Informazioni aggiuntive
Una peculiarità dell’autenticazione tramite chiavi è la possibilità di collegarsi ad host diversi utilizzando la stesse chiavi; ovvero, basta solo ripete la sezione “Configurazione host a cui collegarsi” per ogni host a cui vogliamo collegarci e potremmo farlo utilizzando la stessa chiave privata