作者信息:https://home.cnblogs.com/u/huangjiabobk

在运维工作中,如何使用Ansible向10台服务器中添加一个用户?

1. 准备工作
1.1 安装 Ansible

确保你的 Ansible 控制节点(运行 Ansible 命令的机器)已经安装了 Ansible。以下是安装方法:

# 对于基于 Debian 的系统(如 Ubuntu)
sudo apt update && sudo apt install ansible

# 对于基于 RedHat 的系统(如 CentOS)
sudo yum install ansible
1.2 配置 SSH 访问权限

Ansible 通过 SSH 连接到目标服务器执行任务。确保 Ansible 控制节点可以通过 SSH 访问目标服务器。建议使用 SSH 密钥认证,避免手动输入密码。

  1. 在 Ansible 控制节点上生成 SSH 密钥对(如果尚未生成):

    ssh-keygen -t rsa -b 2048
    

    按回车键接受默认设置,生成密钥对。

  2. 将公钥复制到目标服务器:

    ssh-copy-id user@192.168.1.X
    

    替换 user 为目标服务器上的用户名,192.168.1.X 为目标服务器的 IP 地址。

1.3 创建 Inventory 文件

Inventory 文件用于定义目标主机。创建一个名为 hosts.ini 的文件,并列出所有 10 台服务器的 IP 地址或主机名。

# hosts.ini
[servers]
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
192.168.1.8
192.168.1.9
192.168.1.10
2. 编写 Playbook

创建一个 YAML 文件(例如 add_user.yml),用于向目标服务器添加用户。

2.1 YAML 文件内容

以下是一个完整的 YAML 文件示例,用于向 10 台服务器添加用户:

---
- name: 在 10 台服务器中添加用户
  hosts: servers  # 指定 Inventory 中的主机组
  become: yes    # 使用 sudo 提升权限
  vars:
    username: "newuser"  # 要添加的用户名
    user_password: "your_password"  # 用户密码(建议加密)

  tasks:
    - name: 添加用户 "{{ username }}"
      user:
        name: "{{ username }}"
        password: "{{ user_password | password_hash('sha512') }}"
        state: present
        shell: /bin/bash
        create_home: yes
      notify: 输出用户创建成功信息

    - name: 输出用户创建成功信息
      debug:
        msg: "用户 '{{ username }}' 已成功添加到 {{ inventory_hostname }}"

  handlers:
    - name: 输出用户创建成功信息
      debug:
        msg: "用户 '{{ username }}' 已成功添加到 {{ inventory_hostname }}"

关键点说明:

  1. become: yes:使用 sudo 提升权限,确保有权限添加用户。
  2. password_hash:将明文密码转换为加密形式,提高安全性。
  3. notify:触发 handlers,在用户创建成功后输出确认信息。
3. 执行 Playbook

hosts.iniadd_user.yml 文件保存到同一目录下,然后运行以下命令来执行 Playbook:

ansible-playbook -i hosts.ini add_user.yml
4. 安全性建议
4.1 避免明文密码

在实际生产环境中,建议不要在 YAML 文件中直接写明文密码。可以使用以下方法:

  1. 动态输入密码
    使用 vars_prompt 动态输入密码,避免将密码写入文件:

    vars_prompt:
      - name: user_password
        prompt: "请输入用户密码"
        private: yes
    
  2. 使用 Ansible Vault 加密敏感信息
    将敏感变量(如密码)存储在加密文件中,而不是直接写在 Playbook 中。

    ansible-vault create secrets.yml
    

    secrets.yml 中写入:

    user_password: your_password
    

    然后在 Playbook 中引用:

    vars_files:
      - secrets.yml
    
5. 验证用户是否添加成功

执行 Playbook 后,可以通过以下命令在目标服务器上验证用户是否添加成功:

ssh user@192.168.1.X "id newuser"

如果用户添加成功,你会看到类似以下输出:

uid=1002(newuser) gid=1002(newuser) groups=1002(newuser)
6. 我的总结

综上所述,通过以上步骤,你可以使用 Ansible 轻松地向 10 台服务器中添加一个用户。Ansible 的 Playbook 机制使得任务自动化变得简单高效,同时避免了手动操作的繁琐和错误。

posted @ 2025-03-07 12:49  黄嘉波  阅读(101)  评论(0)    收藏  举报
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波