在运维工作中,如何使用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 密钥认证,避免手动输入密码。
-
在 Ansible 控制节点上生成 SSH 密钥对(如果尚未生成):
ssh-keygen -t rsa -b 2048
按回车键接受默认设置,生成密钥对。
-
将公钥复制到目标服务器:
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 }}"
关键点说明:
become: yes
:使用 sudo 提升权限,确保有权限添加用户。password_hash
:将明文密码转换为加密形式,提高安全性。notify
:触发handlers
,在用户创建成功后输出确认信息。
3. 执行 Playbook
将 hosts.ini
和 add_user.yml
文件保存到同一目录下,然后运行以下命令来执行 Playbook:
ansible-playbook -i hosts.ini add_user.yml
4. 安全性建议
4.1 避免明文密码
在实际生产环境中,建议不要在 YAML 文件中直接写明文密码。可以使用以下方法:
-
动态输入密码
使用vars_prompt
动态输入密码,避免将密码写入文件:vars_prompt: - name: user_password prompt: "请输入用户密码" private: yes
-
使用 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 机制使得任务自动化变得简单高效,同时避免了手动操作的繁琐和错误。