我们使用 Ansible 创建具有此任务的用户:
- name: Create adm users
user:
name: "{{ item.name }}"
group: "{{ common_adm_group }}"
createhome: yes
password: "!!"
update_password: always
state: present
with_items: "{{ common_adm_users }}"
Run Code Online (Sandbox Code Playgroud)
而 common_adm_users 是这样的:
- name: user1
comment: "First Last"
ssh_key: "ssh-rsa AAAAB3Nza..."
Run Code Online (Sandbox Code Playgroud)
这适用于创建用户,但是当有人离开团队时,当我们重新应用包含此任务的角色时,仅从 common_adm_users 中删除他们的用户并不会导致它从服务器中删除。
维护准确的用户列表的最佳做法是什么?
这是与@Konstantin Suvorov 类似的答案,但更精致一些,清楚地说明了一些细微差别,并经过实际测试和使用。
使用以下内容,您只需要维护一个您希望访问的用户名列表。该列表中的任何添加或删除都将反映在主机访问中。
可选的有用提示:我们实际上选择在此列表中使用我们的 GitHub 用户名,这样我们也可以轻松添加 SSH 密钥。例子见文末。
首先,在group_vars
我们定义我们希望访问的开发人员列表(请注意,这可以通过多种方式定义,而不仅仅是group_vars
):
developers:
- user1
- user2
- etc...
Run Code Online (Sandbox Code Playgroud)
其次,我们创建一个组,我们将为其分配开发人员:
- name: Create "developers" group
group:
name: developers
state: present
Run Code Online (Sandbox Code Playgroud)
第三,我们将我们的开发人员添加到这个组中。请注意,我们通过groups
and notgroup
属性添加它们。这会将其添加为次要组并确保它们出现在/etc/group
. 这很重要,因为如果您将它们添加为主要组,它们将不会在 中显示为该组的成员/etc/group
:
- name: Add user accounts
user:
name: "{{ item }}"
shell: /bin/bash
groups: [developers]
state: present
with_items: "{{ developers }}"
Run Code Online (Sandbox Code Playgroud)
第四,我们然后获取当前属于主机上开发者组的所有用户(请注意,这取决于上一步中提到的主要/次要假设):
- name: Determine existing users
shell: 'grep developers /etc/group | cut -d: -f4 | tr "," "\n"'
changed_when: false
register: existing_users
Run Code Online (Sandbox Code Playgroud)
第五,确定哪些用户应该被删除(例如那些没有在我们的developers
group_vars 列表中定义的用户):
- name: Determine removed users
set_fact:
removed_users: "{{ existing_users.stdout_lines | difference(developers) }}"
Run Code Online (Sandbox Code Playgroud)
第六也是最后,删除它们:
- name: Delete removed user accounts
user:
name: "{{ item }}"
state: absent
with_items: "{{ removed_users }}"
Run Code Online (Sandbox Code Playgroud)
可选的有用步骤 - 如果通过 GitHub 用户名添加用户,您可以轻松地从他们在 GitHub 上可用的公钥授予他们 SSH 访问权限:
- name: Add public ssh keys of users
authorized_key:
user: "{{ item }}"
exclusive: yes
key: https://github.com/{{ item }}.keys
state: present
with_items: "{{ developers }}"
Run Code Online (Sandbox Code Playgroud)
您需要在这里执行一些额外的任务。
添加所有必需的用户后,获取现有用户,例如:
- shell: 'grep {{ common_adm_group }} /etc/group | cut -d: -f4 | tr "," "\n"'
changed_when: false # Make task green
register: existing_users
Run Code Online (Sandbox Code Playgroud)
并删除陈旧的:
- user:
name: "{{ item }}"
state: absent
with_items: "{{ existing_users.stdout_lines | difference(common_adm_users | map(attribute='name') | list) }}"
Run Code Online (Sandbox Code Playgroud)
注意:代码未经测试,可能包含拼写错误等。
归档时间: |
|
查看次数: |
13313 次 |
最近记录: |