【发布时间】:2016-04-26 19:34:30
【问题描述】:
我想通过 Ansible 自动创建/维护用户。我希望每个新用户在第一次登录后都必须选择一个新密码。
想象一下,我在 vars 文件中有一个用户列表,其中包含他们的姓名、密码、组等。然后我有一个角色可以做到这一点:
---
- name: Add/maintain users
user:
name: "{{ item.name }}"
password: "{{ item.password }}"
update_password: on_create
createhome: true
generate_ssh_key: true
groups: "{{ item.groups}}"
shell: /bin/bash
state: present
register: users_added
with_items: "{{ users }}"
- name: Force created users to change password
shell: "chage -d 0 {{ item.name }}"
when: "{{ item.changed }}"
with_items: "{{ users_added.results }}"
- name: Set authorized keys
authorized_key:
user: "{{ item.name }}"
key: "{{ item.item.authorized_key }}"
manage_dir: yes
when: "{{ item.changed }}"
with_items: "{{ users_added.results }}"
我希望只为新创建的用户触发第二个任务(“强制创建的用户更改密码”)。到目前为止我发现的最好的事情是检查它是否是changed。
很遗憾,如果用户没有 SSH 密钥,则会触发此操作。配置机器时,运行此任务的用户没有 SSH 密钥。 Ansible 的密码过期,并且每个后续命令都失败了,因为它需要 sudo。
任何人都知道只有在创建用户后才能使任务工作的方法?类似于generate_ssh_key 的on_create 选项。
【问题讨论】:
-
不是一个正确的答案,但您可以将
user拆分为两部分,一部分用于创建用户,另一部分用于添加 ssh 密钥。这样您就可以注册第一个结果并对其采取行动。