Esempio di Ssh
Nella directory del primo esercizio, lanciare il progetto:
cd ~/ex/01net1-ccli-cssh
docker compose up -d
Autenticazione a Chiave
Aprire il terminale one.
Coppia di Chiavi Crittografiche
Generare le chiavi crittografiche:
ssh-keygen
Viene chiesta:
- la locazione ove porre le chiavi - accettare il default
- La passphrase di sblocco della chiave privata
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
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:ZvsVOI2UdgkkBvW05HTOkAqx+M8IHXrjY1MGDJeU08Q root@one
The key's randomart image is:
+---[RSA 2048]----+
| ..=X=.B.. |
| ==oEB.O . |
| . =o .B = |
| + o.o = |
| o = S + o |
| + X . . . |
| * + . |
| . o . . |
| . |
+----[SHA256]-----+
Viene generata una coppia di chiavi, pubblica e privata. Quella pubblica rappresenta l'identità e va distribuita ad altri, quella privata è associata alla chiave pubblica e non va mai distribuita.
Le locazioni sono nella directory ~/.ssh
:
id_rsa
- chiave privataid_rsa.pub
- chiave pubblica
Sono in formato ASCII Armoured, cioè trascodificate in Base64.
L'algoritmo di generazione di default è RSA a 2048 bit.
La chiave è molto lunga. Il fingerprint è uno hash della chiave che la rappresenta e identifica.
Il randomart è un precursore funzionale di un QR Code: è un'altra rappresentazione della nostra chiave pubblica, bidimensionale.
Note
La chiave pubblica generata identifica l'account che l'ha generata, in questo caso root, sulla macchina che l'ha generata, in questo caso one.
E' un'Identità. Perderla, o generarne un'altra, vuol dire non essere più in grado di essere riconosciuti su tutti i server remoti che avevamo configurato con le chiavi precedenti.
Nel mondo reale abbiamo alcune Identità Digitali, per esempio lo SPID, o la CIE o un conto bancario on line. Le chiavi private, o la passphrase di sblocco delle chiavi private, sono spesso registrate su uno smartphone, e associate non solo ad una persona fisica, ma anche all'identificativo IMEI dello smartphone.
Cambiare smartphone può voler dire dover rifare l'identità digitale che quello precedente configurava.
Noi non siamo più noi, siamo il nostro smartphone.
Ssh Agent
Senza questo componente, ogni volta che ci connettiamo alla macchina remota che presto configureremo, ci verrà chiesto non più la password dell'utente remoto, ma la passphrase di sblocco della nostra chiave privata.
Lo Ssh Agent si ricorda questa passphrase per noi e la fornisce trasparentemente.
Abilitare il lo Ssh Agent. Fornirgli la chiave. Viene chiesta la passphrase di sblocco della chiave privata. Non verrà più richiesta durante questa sessione.
eval $(ssh-agent -s)
ssh-add
Se terminiamo la sessione a one naturalmente termina anche il nostro Ssh Agent, e alla prossima sessione dovremo riattifarlo e risottomettergli la chiave.
Trasferimento della Chiave Pubblica
Trasferire la propria chiave pubblica al server:
ssh-copy-id pippo@192.168.101.12
Viene chiesta la password dell'utente pippo sul server.
Terminato. Se ha funzionato l'accesso al server è ora con autenticazione a chiave.
Sul server di destinazione viene trasferita la chiave pubblica dell' utente root@one
, e storata nel file ~/.ssh/authorized_keys
della directory di login di pippo.
Prova di Collegamento
ssh pippo@192.168.101.12
Da subito accesso e non chiede la password di pippo.
Naturalmente se accediamo ad un altro utente o ad un altro server il processo è da ripetere.
Collegamento Parametrico
Sul terminale one editare il file di configurazione:
vi ~/.ssh/config
Host two
User pippo
Hostname 192.168.101.12
Port 22
IdentityFile ~/.ssh/id_rsa
Test di collegamento:
ssh two