Devi fare distinzioni importanti: ci sono chiavi pubbliche e chiavi private . Quando "memorizzati in modo sicuro", richiedono diverse nozioni di "sicuro".
Ogni server SSH possiede una coppia di chiavi pubblica / privata. Ogni server dovrebbe generare la propria coppia di chiavi e la chiave privata dovrebbe mai lasciare il server stesso. La chiave pubblica è pubblica , il che significa che tutti possono apprenderla. Quando ti connetti al server, questa è una delle prime cose che ti dice il server: la sua chiave pubblica. urla su tutta la rete. Quando si tratta di chiavi pubbliche SSH e della loro archiviazione, la domanda è veramente quella di integrità : un determinato client SSH deve ricordare le chiavi pubbliche di tutti i server di cui vuole parlare a (il file $HOME/.ssh/known_hosts
con i soliti client Linux SSH); l'utente malintenzionato potrebbe voler includere una chiave pubblica falsa, al fine di eseguire un server falso.
Ogni client SSH può possedere una coppia di chiavi pubblica / privata: tale coppia di chiavi verrà utilizzata per l'autenticazione del client da parte del server. Se si utilizza l'autenticazione client basata su password, i client non dispongono di tali coppie di chiavi. Se si utilizza l'autenticazione client basata su chiave, ogni server deve conoscere le chiavi pubbliche di "client autorizzati" (il $HOME/.ssh/authorized_keys
per implementazioni SSH Linux).
Nel tuo caso, hai 50 client SSH che parlano con 4000 server SSH. Pertanto, utilizzando il normale modello SSH, dovresti assicurarti che:
- Ciascuno dei 50 client conosce una copia delle chiavi pubbliche per tutti i 4000 server.
- Se si utilizza l'autenticazione client basata su chiave, ciascuno dei 4000 server deve conoscere una copia delle 50 chiavi pubbliche del client.
Dati questi dati, i file rilevanti saranno ingombranti e la gestione delle chiavi sarà un problema (se si aggiunge un nuovo client, la chiave pubblica del nuovo client deve essere importata in 4000 server, con integrità protetta). Public-Key Infrastructure sono stati inventati per risolvere questo problema. Un'istanza "ufficiale" OpenSSH non sa come utilizzare i certificati X.509; tuttavia, esiste una versione modificata (vedere anche quella domanda precedente ). Con una base di codice SSH compatibile con X.509, puoi eseguire la tua Autorità di certificazione (ad esempio, l'open source EJBCA ) e rilascia certificati per client e server. In questo modo, il client ei server SSH si scambieranno reciprocamente i loro certificati quando necessario, in modo dinamico. Ogni macchina dovrà solo memorizzare la propria chiave privata e il proprio certificato e anche "conoscere" il certificato della CA (nel "trust store" pertinente). L'aggiunta di un nuovo client o di un nuovo server al mix sta semplicemente emettendo un certificato e il problema di gestione è risolto (o, piuttosto, spostato intorno : ora hai un PKI da gestire).