2014-10-05 13 views
6

ho scritto uno script ansible per rimuovere le chiavi SSH da server remoti:Aggiungere più chiavi SSH utilizzando ansible

--- 
- name: "Add keys to the authorized_keys of the user ubuntu" 
    user: ubuntu 
    hosts: www 
    tasks: 
    - name: "Remove key #1" 
    authorized_key: user=ubuntu key="{{ item }}" state=absent 
    with_file: 
    - id_rsa_number_one.pub 
    - name: "Remove key #2" 
    authorized_key: user=ubuntu key="{{ item }}" state=absent 
    with_file: 
    - id_rsa_number_two.pub 
... 

Aggiunta di ogni file come un compito diverso è assurda, così ho provato ad utilizzare with_fileglob:

- name: "Remove all keys at once" 
    authorized_key: user=ubuntu key="{{ item }}" state=absent 
    with_fileglob: 
     - /Users/adamatan/ansible/id_rsa*.pub 

Ma questo non funziona con le linee di questo tipo:

fallito: [www.example.com] => (item =/Users/adamatan/ansible/id_rsa_one.pub) => {"failed": true, "item": "/Users/adamatan/ansible/id_rsa_one.pub"} msg: chiave non valida specificata:/Gli utenti/adamatan/ansible/id_rsa_one.pub

Lo stesso file chiave viene rimossa con successo utilizzando un compito unico, ma non riesce quando si tratta di una parte di un fileglob.

Come aggiungere o rimuovere in batch le chiavi SSH utilizzando l'ansible?

risposta

11

Credo che si stanno ottenendo solo i nomi dei file utilizzando with_fileglob, ma with_file recupera i contenuti del file. E il modulo authorized_key richiede la chiave effettiva.

Quindi è necessario eseguire il ciclo continuo utilizzando with_fileglob, ma invece di inviare il nome file al parametro "key =", è necessario utilizzare file lookup plugin.

- name: "Remove all keys at once" 
    authorized_key: user=ubuntu key="{{ lookup('file', item) }}" state=absent 
    with_fileglob: 
     - /Users/adamatan/ansible/id_rsa*.pub 
+2

Quindi questa modifica funziona alla grande per l'aggiornamento di massa/rimozione di voci. Ecco il mio problema: ho le chiavi sui server di qualcuno che non è più qui. Come posso eliminare e sovrascrivere il file authorized_keys con il mio elenco principale di chiavi attive? Quando eseguo questo script rimuove (se assente) le mie chiavi attive o aggiunte (se presenti) ma non rimuove mai le chiavi per le quali non è nei miei file * .pub. – Valien

+1

@Valien per più chiavi esclusive, vedere l'esempio in questa [richiesta pull] (https://github.com/ansible/ansible-modules-core/pull/4167/files). – sudoman

+1

Si potrebbe anche creare '~/.ssh /' e copiare su file 'authorized_keys' statici per tutti gli utenti in alcuni gruppi di host. In tal caso avresti il ​​pieno controllo del contenuto del file. – sudoman

Problemi correlati