如何使用 Ansible 添加用户和创建组

使用Ansible进行用户和组的配置

创建事件文件

创建一个名为dev-server的父组,其中包含一个名为common-base的子组,并将dev-server包含在内。
通过创建多个父组并将其属于子组,可以将执行任务分发并提高PlayBook的可重用性,因此建立这个结构。

[dev-server]
dev002

[common-base:children]
dev-server

制作主教程

为了在执行主机和执行任务增加时更容易进行修正,主控剧本应该保持简单。本次只需包含一个yml文件。

---
- include: common-base.yml

创建小组规则手册

请指定一个在事件中设置了执行主机的群组,并且包含定义变量的yml文件和定义任务的yml文件并执行。

---
- hosts: common-base
  vars_files:
    - ./vars/usergroup.yml
  tasks:
    - include: ./tasks/user-group-setting.yml

创建变量定义文件

我看了很多网站后发现,有些网站将键名命名为用户名,但这样会降低可扩展性,所以我将定义如下。

usergroup:
  user:
    name: hoge
    group: hoge
    uid: 4519
    gid: 4519
    password: $6$hoge$zOyVU7p6q2aLNjyi7.WZy8sgiSqUPRnQBYruV9iAIdBr5p3tqipt9ZscPHlwe8wBEW91jb4mB2fLGPY7dsRBA/

  group:
    name: hogegroup
    gid: 1919

创建密码

在Ansible的USER模块中,需要填写经过哈希处理的密码。
可以通过以下步骤将其哈希处理并设置到变量文件的”password”中。

python -c 'import crypt; print crypt.crypt("123456789", "$6$hogehoge$")'

在Python中,可以使用crypt.crypt函数将密码进行HASH加密并通过print语句获取。加密的方式是使用指定的HASH密钥(将密码和密钥作为参数传入函数)。

创建任务文件

以任务方式定义要构建的服务器配置。如果要进行用户创建和群组创建,则使用user模块和group模块来从变量定义文件中获取配置值,并设置用户和群组。

- name: create group
  group: name={{usergroup.group.name}} gid={{usergroup.group.gid}}

- name: add users that join to group (wheel and usergroup)
  user: name={{usergroup.user.name}} uid={{usergroup.user.uid}} state=present password={{usergroup.user.password}} groups={{usergroup.user.group}},wheel

- name: user join to other group
  user: name={{usergroup.user.name}} append=yes groups={{usergroup.group.name}}

- name: ~/.ssh for users exist
  file: path="/home/{{usergroup.user.name}}/.ssh" state=directory owner={{usergroup.user.name}} group={{usergroup.user.group}} mode=0700

执行

确认没有问题后进行测试。

语法测试

$ ansible-playbook -i ~/ansible/playbook/common-playbook/staging  ~/ansible/playbook/common-playbook/site.yml --syntax-check

查看执行任务列表

$ ansible-playbook -i ~/ansible/playbook/common-playbook/staging  ~/ansible/playbook/common-playbook/site.yml --list-task

干磨

$ ansible-playbook -i ~/ansible/playbook/common-playbook/staging  ~/ansible/playbook/common-playbook/site.yml --check

实际上,只需要一个选项

$ ansible-playbook -i ~/ansible/playbook/common-playbook/staging  ~/ansible/playbook/common-playbook/site.yml

请你提供下列内容的中国化表达:

参考:

Ansible playbook 最佳实践中指出,使用角色进行分隔的顶级playbook应用于一整个主机。这样做可以提高可读性和可维护性。了解更多详情,请访问原文链接:http://docs.ansible.com/ansible/playbooks_best_practices.html#top-level-playbooks-are-separated-by-role

在樱云的技术知识库中,有一篇文章解释了Ansible的相关信息。请查看原文链接:http://knowledge.sakura.ad.jp/tech/3084/

广告
将在 10 秒后关闭
bannerAds