2014-10-05 28 views
6

ja napisałem ansibl skrypt do usuwania kluczy SSH ze zdalnych serwerów:Dodaj wiele kluczy SSH za pomocą ansibl

--- 
- 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 
... 

Dodawanie każdy plik jako inny zadaniem jest niedorzeczny, więc próbowałem przy użyciu with_fileglob:

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

Ale to nie z liniami takimi jak ten:

failed: [www.example.com] => (item =/Users/adamatan/ansible/id_rsa_one.pub) => {"failed": true, "item": "/Users/adamatan/ansible/id_rsa_one.pub"} msg: nieprawidłowy klucz określony:/użytkownicy/adamatan/ansibl/id_rsa_one.pub

Ten sam plik klucza został pomyślnie usunięty przy użyciu unikalnego zadanie, ale nie kiedy jest częścią fileglob.

Jak mogę wsadowo dodawać lub usuwać klucze SSH używając ansibla?

Odpowiedz

11

wierzę otrzymujesz tylko nazwy plików przy użyciu with_fileglob, ale with_file pobiera zawartości pliku. A moduł authorized_key wymaga rzeczywistego klucza.

Powinieneś więc zapętlić, używając with_fileglob, ale zamiast wysyłać nazwę pliku do parametru "key =", powinieneś użyć 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

Ta modyfikacja doskonale nadaje się do masowego aktualizowania/usuwania wpisów. Oto mój problem - mam klucze na serwerach od kogoś, kogo już nie ma. Jak mogę wyczyścić i zastąpić plik authorized_keys moją główną listą aktywnych kluczy? Po uruchomieniu tego skryptu usuwa (jeśli nieobecny) moje aktywne klucze lub dodaje (jeśli są obecne), ale nigdy nie usuwa kluczy, których nie ma w moich plikach * .pub. – Valien

+1

@Valien dla wielu kluczy wyłącznych, patrz przykład w tej [prośbie o pobranie] (https://github.com/ansible/ansible-modules-core/pull/4167/files). – sudoman

+1

Można również utworzyć '~/.ssh /' i skopiować statyczne pliki 'authorized_keys' dla wszystkich użytkowników w niektórych grupach hostów. W takim przypadku będziesz mieć pełną kontrolę nad zawartością pliku. – sudoman