我正在尝试找出一种方法来管理跨多个站点的单个用户的公钥,以及将该密钥放入多个$HOME目录中。原因是;我们的开发人员以自己的身份登录以检查、运行sudo
等,但是他们通过 SSH 以乘客用户身份部署代码,因此他们的 pubkey 也需要位于~/home/passenger/.ssh/authorized_keys中。
我不确定更换是否会让这变得不那么疯狂,但因为我几乎用我目前的剧本在那里,我想我会按原样发布问题,看看它会发生什么AuthorizedKeysFile
。/etc/ssh/sshd_config
也许这确实会以另一种方式更好地解决。
在我的homedirs.yml
文件中,我创建了用户的主目录(它们存在于 LDAP 中),然后将他们的 pubkey 移动到位。这适用于他们自己的主目录,但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 }}"
主页目录.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
这是Ansible中
with_subelements
循环的经典要求: