Добавьте несколько ключей SSH с помощью ansible

Я написал ansible скрипт для удаления 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": "/пользователи/adamatan/ansible / id_rsa_one.pub"} msg: неверный ключ указанный: / Пользователи/adamatan/ansible / id_rsa_one.паб

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

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

1 ответов


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

таким образом, вы все равно должны цикл с помощью with_fileglob, но вместо отправки имени файла в параметр "key=" вы должны использовать плагин поиска файлов).

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