使用 Ansible 管理多个远程用户帐户和公钥

使用 Ansible 管理多个远程用户帐户和公钥

我正在尝试找到一种方法来管理单个用户在多个站点上的公钥,以及将该密钥放入多个站点中$HOME目录。原因是:我们的开发人员以自己的身份登录来检查事情、运行sudo等,但他们将代码部署为乘客用户通过 SSH 连接,因此他们的公钥需要〜/主页/乘客/.ssh/authorized_keys也一样。

我不确定换个AuthorizedKeysFile方式/etc/ssh/sshd_config是否会让事情变得不那么疯狂,但既然我目前的剧本已经差不多完成了,我想我会按原样发布这个问题,看看会有什么结果。也许这确实可以用另一种更好的方式来解决。

在我的homedirs.yml文件中,我创建了用户的主目录(它们存在于 LDAP 中),然后将他们的公钥移到位。这对于他们自己的主目录来说很好,但用户passenger也需要这个密钥。由于我可能会将此剧本用于其他用户和主机,因此我定义了一个to_user:列表,该列表定义了应该为哪些主目录设置公钥。

我如何循环遍历{{ 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 }}"

主目录.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

答案1

这是一个经典的要求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

相关内容