Назад | Перейти на главную страницу

Использование ansible для добавления открытых ключей пользователей в файл authorized_keys одного пользователя

Попытка добавить открытые ключи Github двух пользователей в файл авторизованных пользователей. Я могу успешно получить ключи SSH:

---
- hosts: 127.0.0.1
  connection: local
  vars:
    my_users:
      belminf: "belminf"
      bob: "tmessins"
  tasks:
    - name: Retrieving all keys from GitHub
      shell: /usr/bin/curl https://github.com/{{ item.value }}.keys 2> /dev/null
      register: ssh_keys
      with_dict: my_users

    - debug: var=ssh_keys

Однако я не уверен, как пройти через ssh_keys результаты и использование authorized_keys задача добавить полученные ключи.

Моя нелепая попытка:

   - name: Adding keys to authorized_keys
      authorized_key: user=belminf key="{{ item }}" path=/home/belminf/test_auth state=present
      with_items: ssh_keys.results

Результаты в invalid key specified. Понятно, но у меня нет идей. Кто угодно?

Начиная с Ansible 1.9, значение для key может быть URL-адресом, что избавляет от необходимости свертывать URL-адрес с помощью shell модуль.

Пример:

- name: Add my SSH key
  authorized_key: user=jeffwidman key=https://github.com/jeffwidman.keys

Хорошо, я немного подправил ваш playbook, и вот исправленная версия

---
- hosts: 127.0.0.1
  connection: local
  vars:
    my_users:
      belminf: "belminf"
      bob: "tmessins"
  tasks:
    - name: Retrieving all keys from GitHub
      shell: /usr/bin/curl https://github.com/{{ item.value }}.keys 2> /dev/null
      register: ssh_keys
      with_dict: my_users

   - name: Adding keys to authorized_keys
      authorized_key: user=belminf key="{{ item.stdout }}" path=/home/belminf/test_auth state=present
      with_items: ssh_keys.results
      ignore_errors: yes

Обратите внимание на некоторые изменения:

  • На authorized_key модуль, ключ был изменен на item.stdout. Стандартный вывод - это открытый ключ, который вам нужен.
  • На authorized_key модуль, я определил ignore_errors: yes чтобы возобновить выполнение playbook всякий раз, когда ваша задача curl не может быть получена, либо проблема с Интернетом, либо 404 Not found (например, ключ tmessins). Конечно, вы можете настроить это контроль того, что определяет отказ поэтому он все равно не удался, когда произошла другая ошибка.

Теперь это действительно просто:

- name: get github key(s) and update the authorized_keys file
  authorized_key:
    user: "{{ username }}"
    key: "https://github.com/{{ username }}.keys"

для подробностей, проверьте этот github роль