文章背景图

Ansible 入门与 Inventory:主机清单、Ad Hoc 模块和安全连接

2026-07-25
3
-
- 分钟

Ansible 在控制节点运行,通过 SSH/WinRM 等连接受管节点,默认不要求在目标机安装常驻 Agent。它的价值是使用幂等模块把重复运维操作变成可审计自动化。

## 项目结构

```text

ansible-project/

├── ansible.cfg

├── inventories/

│ ├── dev/

│ └── prod/

├── group_vars/

├── host_vars/

├── playbooks/

├── roles/

└── collections/requirements.yml

```

配置、Inventory、Playbook 和依赖都进入版本控制,但 Vault 密码和 SSH 私钥不能提交。

## Inventory

```ini

[web]

web01 ansible_host=192.0.2.11

web02 ansible_host=192.0.2.12

[db]

db01 ansible_host=192.0.2.21

[production:children]

web

db

```

主机应按 What、Where、When 分组,例如应用、区域和环境。连接账号、端口等行为变量可以放 group_vars,但 Secret 使用 Vault 或外部 Secret 插件。

验证:

```bash

ansible-inventory -i inventories/dev --graph

ansible-inventory -i inventories/dev --host web01

ansible all -i inventories/dev -m ansible.builtin.ping

```

## Ad Hoc 命令

```bash

ansible web -i inventories/dev -m ansible.builtin.command -a 'uptime'

ansible all -i inventories/dev -m ansible.builtin.setup -a 'filter=ansible_distribution*'

ansible web -i inventories/dev -b -m ansible.builtin.package -a 'name=nginx state=present'

ansible web -i inventories/dev -m ansible.builtin.service -a 'name=nginx state=started'

```

优先使用完全限定模块名和专用模块。command 不经过 shell;只有确实需要管道、重定向时才使用 shell,并严格控制变量输入。

## 幂等与 check mode

好的任务重复执行不会产生无意义变更。修改生产前使用:

```bash

ansible-playbook -i inventories/prod site.yml --syntax-check

ansible-playbook -i inventories/prod site.yml --check --diff --limit web01

```

并非所有模块都完全支持 check mode,所以仍需要测试环境和小批量 limit。

## 安全连接

- 为自动化使用专用、可审计账号。

- SSH Key 设置口令或由凭证系统托管。

- sudo 只允许所需操作。

- 保持 host key checking,避免连接到伪造主机。

- 控制节点等同高权限管理面,需要补丁、MFA、最小人员访问和日志。

- 不在命令行通过 extra-vars 传明文密码。

## 学习顺序

Inventory 与连接→常用模块→Playbook→变量和模板→Handlers/Blocks→Vault→Roles/Collections→动态 Inventory 与自动化平台。每一步都用“执行两次是否仍正确、失败是否可恢复”验证。

参考:https://docs.ansible.com/projects/ansible/latest/getting_started/

原创

Ansible 入门与 Inventory:主机清单、Ad Hoc 模块和安全连接

本文链接: Ansible 入门与 Inventory:主机清单、Ad Hoc 模块和安全连接

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录