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

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

Я пытаюсь разработать способ управления pubkey одного пользователя на нескольких сайтах, а также перенести этот ключ на несколько $ HOME каталоги. Причина существования; наши разработчики входят в систему как сами, чтобы что-то проверить, запустить sudo и т.д., однако они развертывают код как пассажир пользователь через SSH, поэтому его pubkey должен быть в ~ / домой / пассажир / .ssh / authorized_keys также.

Я не уверен, что меняю AuthorizedKeysFile в /etc/ssh/sshd_config сделало бы это менее безумным, но так как я почти закончил со своим текущим учебником, я решил опубликовать вопрос как есть и посмотреть, что из этого выйдет. Возможно, это действительно лучше было бы решить другим способом.

В моем homedirs.yml файла, я создаю домашние каталоги пользователей (они существуют в LDAP), а затем перемещаю их открытый ключ на место. Это отлично работает для их собственного домашнего каталога, но passenger пользователю также нужен этот ключ. Поскольку я могу использовать эту книгу для других пользователей и хостов, я определил to_user: список, который определяет, для каких домашних каталогов должен быть настроен pubkey.

Как мне перебрать {{ item.to_user }} список в authorized_key: играть где {{ item.name }} в настоящее время упоминается?

учебник

---
- hosts: all
  vars_files:
    - ../group_vars/homedirs.yml
  gather_facts: false

  tasks:
    - name: Set up home directory
      when: inventory_hostname in item.allowed_hosts
      file:
        path: "/home/{{ item.name }}"
        state: directory
        owner: "{{ item.name }}"
        group: "{{ item.group }}"
        mode : 0750
      with_items: "{{ homedirs }}"


    - name: setup ssh pub key
      when: inventory_hostname in item.allowed_hosts
      authorized_key:
        user: '{{ item.name }}'
        state: present
        key: '{{ item.pubkey }}'
      with_items: "{{ homedirs }}"

homedirs.yml

# homedirs.yml
homedirs:
  - name   : usr123
    group  : developers
    pubkey :  "{{ lookup('file', '../group_vars/pubkeys/user123@somehost.pub') }}"
    to_user:
      - user123
      - passenger
    allowed_hosts  :
      - web1.my.com
      - web1.test.my.com

  - name   : usr555
    group  : admin
    pubkey :  "{{ lookup('file', '../group_vars/pubkeys/user555@somehost.pub') }}"
    to_user:
      - user555
      - sysadmin
    allowed_hosts  :
      - blah.blah.host

Это классическое требование к with_subelements петля в Ansible:

- name: Set up home directory
  when: inventory_hostname in item.0.allowed_hosts
  file:
    path: "/home/{{ item.1 }}"
    state: directory
    owner: "{{ item.1 }}"
    group: "{{ item.0.group }}"
    mode : 0750
  with_subelements:
    - "{{ homedirs }}"
    - to_user