2014-10-05 11 views
6

Ich habe einen ansible Skript geschrieben, um SSH-Schlüssel von Remote-Servern zu entfernen:Fügen Sie mehr SSH-Schlüssel mit 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 
... 

Hinzufügen jede Datei als eine andere Aufgabe grotesk ist, so habe ich versucht, mit with_fileglob:

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

Aber dies nicht gelingt mit Zeilen wie diese:

fehlgeschlagen: [www.example.com] => (Element =/Benutzer/adamatan/ansible/id_rsa_one.pub) => {"fehlgeschlagen": true, "Element": "/Users/adamatan/ansible/id_rsa_one.pub"} msg: ungültiger Schlüssel angegeben:/Benutzer/adamatan/ansible/id_rsa_one.pub

Die gleiche Schlüsseldatei erfolgreich entfernt wird eine eindeutige Aufgabe verwenden, aber nicht, wenn es sich um ein Teil eines fileglob ist.

Wie kann ich SSH-Schlüssel mithilfe von Ansible stapelweise hinzufügen oder entfernen?

Antwort

11

Ich glaube, Sie sind nur die Dateinamen bekommen with_fileglob verwenden, aber with_file ruft die Inhalt der Datei. Und das authorized_key-Modul benötigt den eigentlichen Schlüssel.

Also sollten Sie noch Schleife mit with_fileglob, aber anstatt den Dateinamen auf den "key =" Parameter senden, sollten Sie die file lookup plugin verwenden).

- 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

Diese Änderung funktioniert also gut für Bulk-Aktualisierung/Entfernen von Einträgen. Hier ist mein Problem - ich habe Schlüssel auf Servern von jemandem, der nicht mehr hier ist. Wie kann ich die Datei authorized_keys mit meiner Hauptliste aktiver Schlüssel löschen und überschreiben? Wenn ich dieses Skript ausführe, entfernt es (wenn es nicht vorhanden ist) meine aktiven Schlüssel oder fügt hinzu (wenn vorhanden), aber es entfernt niemals die Schlüssel, die nicht in meinen * .pub-Dateien enthalten sind. – Valien

+1

@Valien für mehrere exklusive Schlüssel, siehe das Beispiel in dieser [Pull-Anfrage] (https://github.com/ansible/ansible-modules-core/pull/4167/files). – sudoman

+1

Sie können auch '~/.ssh /' erstellen und statische Dateien 'authorized_keys' für alle Benutzer in einigen Hostgruppen kopieren. In diesem Fall hätten Sie volle Kontrolle über den Dateiinhalt. – sudoman