Questi due file sono entrambi usati da SSH ma per scopi completamente diversi, che potrebbero facilmente spiegare la tua confusione.
Chiavi autorizzate
Per impostazione predefinita SSH utilizza account utente e password gestiti dal sistema operativo host. (Beh, in realtà è gestito da PAM ma questa distinzione probabilmente non è troppo utile qui.) Ciò significa che quando tu tentare di connettersi a SSH con il nome utente "bob" e alcune password il programma server SSH chiederà al sistema operativo "Ho ricevuto questo ragazzo chiamato 'bob' che mi sta dicendo che la sua password è 'wonka'. Posso lasciarlo entrare?" Se la risposta è sì, allora SSH ti consente di autenticarti e ti metti in cammino.
Oltre alle password, SSH ti consente anche di utilizzare ciò che viene chiamato crittografia a chiave pubblica per identificarti. L'algoritmo di crittografia specifico può variare, ma in genere è RSA o DSA o, più recentemente ECDSA . In ogni caso quando imposti le tue chiavi, utilizzando il programma ssh-keygen
, crei due file. Uno che è la tua chiave privata e quella che è la tua chiave pubblica. I nomi sono abbastanza auto-esplicativi. Di progettazione la chiave pubblica può essere disseminata come semi di tarassaco nel vento senza comprometterti. La chiave privata deve essere sempre mantenuta nella massima riservatezza.
Quindi quello che fai è posizionare la tua chiave pubblica nel file authorized_keys
. Quindi quando tenti di connetterti a SSH con il nome utente "bob" e la tua chiave privata chiederà al sistema operativo "Ho ricevuto questo nome di ragazzo" bob ", può essere qui?" Se la risposta è sì, SSH controllerà la tua chiave privata e verificherà se la chiave pubblica nel file authorized_keys
è la sua coppia. Se entrambe le risposte sono sì, allora sei autorizzato.
Host conosciuti
Molto simile al modo in cui il file authorized_keys
viene utilizzato per autenticare gli utenti, il file known_hosts
viene utilizzato per autenticare i server. Ogni volta che SSH è configurato su un nuovo server, genera sempre una chiave pubblica e privata per il server, proprio come hai fatto per il tuo utente. Ogni volta che ti connetti a un server SSH, ti mostra la sua chiave pubblica, insieme a una prova che possiede la chiave privata corrispondente. Se non hai la sua chiave pubblica, il tuo computer la chiederà e la aggiungerà nel file known_hosts
. Se hai la chiave, e corrisponde, ti connetti subito. Se i tasti non corrispondono, otterrai un avvertimento molto brutto. Questo è dove le cose si fanno interessanti. Le 3 situazioni in cui si verifica tipicamente una mancata corrispondenza di chiave sono:
- La chiave è cambiata sul server. Ciò potrebbe provenire dalla reinstallazione del sistema operativo o in alcuni sistemi operativi la chiave viene ricreata durante l'aggiornamento di SSH.
- Il nome host o l'indirizzo IP a cui ci si sta connettendo appartengono a un altro server. Questa potrebbe essere la riassegnazione dell'indirizzo, DHCP o qualcosa di simile.
- Il maligno attacco man-in-the-middle sta accadendo. Questa è la cosa più importante che il controllo delle chiavi sta cercando di proteggerti.
In entrambi i casi, known_hosts
e authorized_keys
, il programma SSH utilizza la crittografia a chiave pubblica per identificare il client o il server.