SSH: salvare l'autenticazione: copertina

Ovvero come non usare più username e password.

Il fantastico tool ssh permette moltissime cose tra cui la possibilità di salvare le credenziali d'accesso in modo che non sarà più necessario fornire username e password per accedere.

Spiegazione

In realtà il meccanismo di autenticazione di SSH è molto più sofisticato rispetto ad una verifica di username e passoword.
SSH fa uno scambio di di dati binari (non passa nulla in chiaro), e fa uno scambio di chiavi di cifratura che risiedono sul device da cui si fa la connessione.

Il salvataggio delle account in realtà non salva username e password, ma i dati di identificazione dei dispositivi (fingerprinting) e le chiavi pubbliche dei dispositivi in gioco (es: del server a cui ci connettiamo e del terminale da cui facciamo la connessione).

Questo meccanismo, molto sicuro, può essere ulteriormente blindato lato server disattivando l'autenticazione tramite username e password e obbligando l'esclusivo uso di chiavi digitali.

Come fare

Per autenticarci senza usare username e password possiamo e copiare manualmente le chiavi pubbliche dei dispositivi o usare l'utility ssh-copy-id che farà quasi tutto per noi.

Ipotizziamo di connetterci dal client mypc (con Linux come OS) al server server.example.com equipaggiato con un sistema *NIX con SSH server:

1. apriamo un terminale;
2. diamo il comando

ssh-copy-id Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.

3. confermare il salvataggio della fingerprinting e inserire la password dell'utente;
4. al termine dello scambio e della registrazione delle chiavi avremo un messaggio come segue:

The authenticity of host 'server.example.com (10.68.12.80)' can't be established.
ED25519 key fingerprint is SHA256:YKlq/g1+9VrPY8kojjsOS1S9iEsm4KsJ6SOBBUZZiTI.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/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
Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.'s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.'"
and check to make sure that only the key(s) you wanted were added.

A questo punto tutto è fatto e per stabilire la nostra connessione sarà necessario solamente invocare ssh come segue

ssh Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.

Conclusione

Alcune considerazioni:

  • i dati vengono salvati sui dispositivi, pertanto cambianto dispositivo bisogna rifare la procedura;
  • questo metodo è ideale per creare canali automatici di comunicazione tra macchine remote (es.: trasferimento di file, raccolta di dati, esecuzione di comandi remoti, ecc...);
  • le informazioni salvate per l'accesso (fingerprinting e chiavi) possono essere /prese/ da chi ha accesso al nostro dispositivo se può accedere la nostro profilo.
    L'esfiltrazione dei dati, comunque, non permetterà direttamente l'accesso al sistema remoto.