- Simone Piccardi
- Settembre 2024
- Sistemi
Utilizzare una connessione cifrata con il protocollo SSH (Secure SHell) è ormai una esigienza imprescindibile per poter effettuare in completa sicurezza la gestione remota di un server tramite la riga di comando.
Questa funzionalità, nel caso di Linux, viene universalmente fornita dal progetto OpenSSH, che fornisce sia la parte server (il servizio da installare sul server, che consente di collegarsi allo stesso) che la parte client, da eseguire sulla propria workstation, col comando @ssh@ .
Anche nell’universo Windows è possibile utilizzare il protocollo per la parte client, dove però è più comune utilizzare come client un programma grafico, Putty.
Nonostante il servizio SSH renda sempre possibile accedere usando la normale autenticazione con username e password, per la sicurezza è importante utilizzare il supporto fornito dal progetto per l’autenticazione a chiavi, che sulle distribuzioni recenti è anche l’unico che viene attivato nell’installazione di default per dare un accesso amministrativo con l’utente root.
Qui di seguito vedremo come effettuare una serie di operazioni relative alla gestione ed all’uso delle chiavi con OpenSSH.
Come creare una coppia di chiavi
La prima azione da fare, per l’utilizzo di questo meccanismo di autenticazione è la creazione di una coppia di chiavi personale: una chiave privata, che è quella che ci permetterà di identificarci distribuendo a destinazione la corrispondente chiave pubblica. Come la gran parte delle operazioni relative alla gestione delle chiavi, questa operazione dovrà essere eseguita eseguita attraverso il comando ssh-keygen
, da richiamare sulla propria workstation senza nessun argomento:
root@bookworm:~# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: 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:AlZFxA+olPPKhpz9KwdvRwIwDMpgNJFo7Im2IQCCVjI root@bookworm The key's randomart image is: +---[RSA 3072]----+ |@E+. ..*+ | |X=B +.. o | |B..+o+ o | |o= .o.. . | |o.o= o. S | | .+ * ... | | . + o | | . = . | | +.o | +----[SHA256]-----+
la prima azione che vedremo è la richiesta di indicare su quale file salvare la chiave privata (quella pubblica sarà sempre salvata in un secondo file con lo stesso nome ed un ulteriore suffisso .pub
). Di default è meglio usare il file .ssh/id_rsa
nella home dell’utente che esegue il comando.
Successivamente verrà chiesto l’inserimento di una passphrase (un modo per enfatizzare la necessità di usare qualcosa di più robusto della classica password elementare), da ripetere due volte per conferma. Si può creare una chiave senza password premendo due volte invio.
Verrà poi stampata una immagine in ascii-art dove sarà illustrato visivamente il contenuto della chiave, indicandone anche gli algoritmi crittografici usati e le dimensioni. Di default si usa l’algoritmo RSA, ma con l’opzione -t
si può indicare di usarne uno degli altri due possibili, ecdsa
e ed25519
(ma in genere non ci sono motivi specifici per cambiarlo).
Come detto prima, a questo punto si troveranno la chiave pubblica e la chiave privata rispettivamente nei file .ssh/id_rsa
e .ssh/d_rsa.pub
.
Come installare una chiave pubblica per l’accesso remoto
Se si vuole accedere ad un server remoto usando l’autenticazione a chiavi sarà necessario che la propria chiave pubblica sia inserita fra quelle autorizzate. Pertanto quello che dovrà essere fatto dal lato client è solo quello di mettere a disposizione la propria chiave pubblica per l’installazione sul server, vale a dire il file .ssh/d_rsa.pub
.
Per indicare un accesso SSH con autenticazione a chiavi OpenSSH è necessario che la chiave sia inserita fra quelle installate nel file .ssh/authorized_keys
nella home dell’utente su cui ci si vuole collegare. Dunque, dando per scontato che sia stata resa disponibile la suddetta chiave pubblica a destinazione nel file nuovachiave.pub
(assumiamo che sia stata caricata da chi ne ha la possibilità, in genere l’amministratore del server) questa potrà essere aggiunta a quelle autorizzate semplicemente eseguendo:
cat nuovachiave.pub >> ~/.ssh/authorized_keys
che la aggiunge in coda (sono sempre una per riga) a quelle eventualmente già presenti.
E’ importante tenere in considerazione che questo comando deve essere eseguito in genere dall’utente a cui sui vuole dare accesso, che è l’unico che deve poter scrivere sul file, se per esempio lo si fa eseguire a root per scrivere nella home di un altro utente occorrerà verificare che il file sia già esistente perché altrimenti verrà creato da root, e non appartenendo più all’utente ed al suo gruppo, OpenSSH non consentirà più nessun accesso.
Dopo aver completato questa installazione, ci si potrà collegare alla macchina dal client invocando ssh utente@server.remoto.it
ma al posto della password dell’utente remoto, a chiunque si collegarà verrà richiesta la passphrase della propria chiave privata (e se usa un agent SSH solo la prima volta che la utilizza). E’ importante notare come, in questo, caso chi si collega non deve conoscere la password dell’utente remoto e l’amministratore del server remoto può revocare l’accesso semplicemente rimuovendo la chiave pubblica, senza necessità di cambiare una password che non è neanche necessario sia presente.
Come cambiare la passphrase di una chiave privata
Per la sicurezza è essenziale la protezione della propria chiave privata, perché chiunque ne entri in possesso potrà avere accesso diretto a tutti i server per cui si è autorizzati. Ecco perchè è essenziale utilizzare una buona passphrase, ed inoltre, sarà necessario cambiarla ogni tre o sei mesi se si è vincolati a rispondere ai requisiti sulla normativa della privacy.
Per cambiare la passphrase della propria chiave privata è sufficiente usare il comando ssh-keygen -p
, che ci chiederà prima di indicare in quale file questa è contenuta indicando il default, che è ~/.ssh/id_rsa
. Se si preme invio, questo verrà accettato (se ne può indicare un altro con ssh-keygen -p -f /path/to/file
) e poi chiederà la vecchia passphrase e la nuova due volte, riscrivendo il file con la chiave privata cifrata dalla nuova passphrase.
Tenendo in considerazione che quanto è necessario per l’autenticazione presso i server remoti è solo il contenuto della chiave privata, non servirà effettuare nessuna operazione sugli stessi, in quanto questo non cambia, cambiano semmai soltanto le modalità in cui la si rende accessibile al comando ssh
, che dovrà essere fatto con la nuova passphrase.
Come convertire una chiave pubblica di Putty per OpenSSH
I comandi visti finora si possono appplicare all’uso delle chiavi private con il client a riga di comando di Linux, ma come abbiamo detto prima, su Windows il client più comune è Putty, che non solo fornisce il programma di accesso al protocollo, ma anche un opportuno emulatore di terminale per l’uso da parte della riga di comando su una macchina Unix.
Però le chiavi SSH generate da Putty utilizzano un formato diverso rispetto a quelle di OpenSSH, in stile PEM (analogo a quello usato da OpenSSL), e sono della forma:
---- BEGIN SSH2 PUBLIC KEY ---- Comment: "rsa-key-20240709" AAAAB3NzaC1yc2EAAAADAQABAAABAQCa8ajLS0A7xNSLCp/VuB+kXRbKomuqd2dX ... BWiQN9v1n21YSaC+NCuCXO/7POJrGhfWe/ppL/jPKXTGKl0x5aEN ---- END SSH2 PUBLIC KEY ----
In questa forma le chiavi non sono adatte all’uso nel file .ssh/authorized_keys
utilizzato dalla parte server di OpenSSH, quindi se le bisogna installarle per fornire un accesso, prima devono essere opportunamente convertite nel formato a riga singola utilizzato da OpenSSH con il comando:
ssh-keygen -i -f putty_pub.key > openssh_key.pub
dopo aver fatto questo, per l’installazione su un server remoto si potrà procedere come prima, usando il file openssh_key.pub
così ottenuto.
A questo punto speriamo che l’articolo possa esservi stato utile, ma se doveste avere dubbi o curiosità, non esitate a contattarci sul nostro sito Contatti – Not Just A Cloud
La redazione