2014-10-05 8 views
6

Я написал анзибль скрипт для удаления ключей SSH с удаленных серверов:Добавление нескольких ключей SSH с помощью анзибль

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

Добавление каждого файла, как другая задача нелепа, поэтому я попытался с помощью with_fileglob:

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

Но это не удается с линиями, как это:

не удалось: [www.example.com] => (item =/Users/adamatan/ansible/id_rsa_one.pub) => {"failed": true, "item": "/Users/adamatan/ansible/id_rsa_one.pub"} msg: недействительный ключ :/Пользователи/adamatan/анзибль/id_rsa_one.pub

Тот же самый ключевой файл успешно удален с помощью уникальной задачи, но терпит неудачу, когда это часть fileglob.

Как я могу добавлять или удалять ключи SSH с помощью несменяемого?

ответ

11

Я считаю, что вы получаете только имена файлов, используя with_fileglob, но with_file извлекает содержимого файла. А для модуля authorized_key требуется фактический ключ.

Итак, вы должны по-прежнему использовать цикл with_fileglob, но вместо отправки имени файла в параметр «key =» вы должны использовать 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

Так что эта модификация отлично подходит для массового обновления/удаления записей. Вот моя проблема - у меня есть ключи на серверах от кого-то, которого больше нет здесь. Как очистить и перезаписать файл authorized_keys с моим основным списком активных ключей? Когда я запускаю этот скрипт, он удаляет (если отсутствует) мои активные ключи или добавляет (если присутствует), но никогда не удаляет ключи, для которых нет в моих * .pub-файлах. – Valien

+1

@Valien для нескольких эксклюзивных ключей, см. Пример в этом [запрос на извлечение] (https://github.com/ansible/ansible-modules-core/pull/4167/files). – sudoman

+1

Вы также можете создать '~/.ssh /' и скопировать поверх статических 'authorized_keys' файлов для всех пользователей в некоторых группах хостов. В этом случае у вас будет полный контроль над содержимым файла. – sudoman

Смежные вопросы