Condivisione di chiavi SSH pubbliche e private comuni per un cluster di macchine

2

Immagino che questo sia il modo di regolare un dibattito interno che sto facendo con me stesso.

Nel mio processo di provisioning, desidero condividere una chiave ssh pubblica e privata comune per ogni macchina in un cluster (poiché si trovano dietro un loadbalancer e non voglio ottenere errori di incompatibilità della chiave) e un interno contrazione, mi sta dicendo che è sbagliato. Il modo corretto sarebbe quello di generare una chiave privata, per il client, e aggiungere la chiave pubblica al file authorized_key?

Non sono in grado di ragionare correttamente perché condividere una coppia di chiavi comune tra tutti i nodi del cluster è brutto. Uno che viene in mente è il fatto, ci vuole solo una macchina per essere comprimata. Quale sarebbe un caso d'uso in cui vorremmo usare l'opzione uno? O è completamente disapprovato.

Una descrizione del requisito: Se abbiamo Bob, che desidera connettersi a un cluster di Alice, vogliamo collegarci a Alice nel cluster di Alice.

    
posta Sriram Venkatesh 24.04.2015 - 00:12
fonte

3 risposte

1

Per rispondere alla tua domanda, sì, puoi condividere la chiave host su tutti i server nel tuo pool con bilanciamento del carico. Quindi, si effettua la verifica della chiave host una volta per la voce IP / DNS che si sta eseguendo il bilanciamento del carico e si collegherà a qualsiasi membro del pool da quel momento in poi senza chiedere di nuovo.

Prima di andare oltre, per chi si chiede perché lo faresti. Questo potrebbe non riguardare il controllo dei server (amministrazione). Potrebbe essere l'uso di scp / sftp per inviare file e quindi probabilmente una sorta di scheduler / applicazione di lavoro su ogni membro del pool.

Non si tratta necessariamente di bilanciare il carico. Potresti essere interessato a questo set up se, ad esempio, hai una disponibilità elevata.

Ad ogni modo, facciamo finta di aver registrato myapp.mycompany.net al 10.12.77.77 e questo round robin a 8 server. Condividete le chiavi host tra tutti e 8 i server e poi ssh myapp.mycompany.net, vi chiederà di confermare e quindi sarete impostati. Ora puoi scp / sftp / qualunque cosa tu stia cercando di fare nella voce DNS e non ti chiederà quando andrà a un nuovo membro del pool.

Spero che questo aiuti!

    
risposta data 19.05.2015 - 19:21
fonte
1

Non penso che questo dovrebbe essere un problema - l'uso di una singola coppia di chiavi per accedere a molti server è perfetto e la maggior parte del mondo funziona in questo modo.

È importante capire, come menzionato @Tom Leek, che la parte privata della chiave, che deve rimanere segreta, viene memorizzata solo sulla tua singola macchina e non viene mai trasferita da essa. Quindi, anche se uno dei server è compromesso (in un modo diverso da qualcuno che ruba la tua chiave privata), non è possibile utilizzare questo accesso per ottenere l'accesso SSH agli altri server (anche se è probabile che l'autore dell'attacco abbia usato un exploit che funziona altrettanto bene su tutti gli altri server in quanto hanno la stessa configurazione).

Devo notare che l'utilizzo di un "Load Balancer" per accedere ai server su SSH mi sembra sospetto: "Load Balancer" indica in genere un controllo di accesso a livello IP o TCP in modo tale che il client si connetta a un singolo IP e ogni volta viene assegnato un back-end diverso. Questo non è un modo accettato per connettersi a SSH, poiché si verificherà ancora un errore di disallineamento dell'host quando il client tenta di verificare la chiave dell'host indipendentemente dalla chiave di accesso (a meno che non si invii tutti gli host con la stessa chiave host, che credo sia una scelta sbagliata). Una configurazione probabile è che si utilizzerà una configurazione round robin DNS per indirizzare tutti i server come lo stesso nome, dove ogni volta si risolve in un IP diverso. In tale configurazione il client può verificare ciascun IP separatamente e non si otterrà un errore.

    
risposta data 04.05.2015 - 18:30
fonte
0

Le chiavi client e server vivono in mondi diversi: la chiave del client viene verificata dal server, la chiave del server viene verificata dal client. Il tuo problema consiste nell'avere molti server e un client e la condivisione delle chiavi tra i server. Quello che fai con l'altro mondo (la chiave del client e il file authorized_keys ) è irrilevante; non ha alcun impatto su quella domanda.

Sono tentato di dire che il problema più grande con questa condivisione delle chiavi non è che la chiave sia condivisa; è perché vuoi condividere la chiave. Vuoi condividere la chiave perché non sai a quale server stai per collegarti. E che è il problema: stai facendo un SSH attraverso un sistema di bilanciamento del carico che ti invierà a uno dei server, ma senza alcun controllo su quale dei due finirai. Questo non è quello che vuoi. Vuoi essere in grado di fare un SSH su tutti i server, non solo su uno scelto a caso. Non puoi farlo se carichi il bilanciamento delle connessioni SSH.

Se vuoi (come credo) essere in grado di controllare tutte le tue macchine cluster individualmente, allora devi avere un modo per connetterti a qualcuno di loro in modo specifico, e possibilmente (probabilmente) diversi allo stesso tempo. Ciò significa utilizzare i loro indirizzi IP specifici non condivisi o, come suggerisce @Iserni, porte distinte (se è necessario SSH "dall'esterno" e avere solo un indirizzo IP disponibile). A quel punto, la condivisione delle chiavi è meno importante. Puoi comunque voler condividere la chiave per altri motivi (ad es. Creare tutte le macchine da un'immagine già configurata o creare automaticamente una .ssh/known_hosts già popolata per il tuo cliente). La condivisione delle chiavi tra i server implica lo spostamento della chiave privata, che in generale non è un'idea molto buona; ma le macchine di un cluster sono probabilmente vicine e si può presumere (o almeno sperare) che possano parlare insieme senza essere spiati dagli estranei.

Potresti anche voler esaminare gli strumenti collegati dalla risposta .

    
risposta data 24.04.2015 - 02:25
fonte

Leggi altre domande sui tag