我正在尝试找到一种方法来管理单个用户在多个站点上的公钥,以及将该密钥放入多个站点中$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