Gerenciando várias contas de usuários remotos e pubkeys com Ansible

1

Estou tentando descobrir uma maneira de gerenciar a barra de publicação de um único usuário em vários sites, bem como soltar essa chave em vários diretórios $ HOME . Razão de ser; nossos desenvolvedores se registram como eles para checar as coisas, rodem sudo etc, porém eles implementam o código como um usuário passageiro sobre SSH para que seu pubkey esteja em ~ / home / passenger /. ssh / authorized_keys também.

Não tenho certeza se alterar AuthorizedKeysFile em /etc/ssh/sshd_config deixaria isso menos louco, mas como estou quase lá com meu manual atual, achei que poderia postar a pergunta como está e ver o que acontece isto. Talvez isso seja melhor resolvido de outra maneira.

No meu arquivo homedirs.yml , eu crio os diretórios pessoais do usuário (eles existem no LDAP) e, em seguida, movo sua pubkey para o lugar. Isso funciona bem para seu próprio diretório inicial, mas o usuário passenger também precisa dessa chave. Como posso usar este manual para outros usuários e hosts, defini uma to_user: list que define para quais diretórios home o pubkey deve ser configurado.

Como faço um loop pela lista {{ item.to_user }} no authorized_key: play, onde {{ item.name }} é atualmente referenciado?

playbook

---
- 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/[email protected]') }}"
    to_user:
      - user123
      - passenger
    allowed_hosts  :
      - web1.my.com
      - web1.test.my.com

  - name   : usr555
    group  : admin
    pubkey :  "{{ lookup('file', '../group_vars/pubkeys/[email protected]') }}"
    to_user:
      - user555
      - sysadmin
    allowed_hosts  :
      - blah.blah.host
    
por Server Fault 06.07.2018 / 18:18

1 resposta

1

Este é um requisito clássico para um with_subelements loop no 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
    
por 06.07.2018 / 19:44