Inventory 主机清单
inventory 描述受控主机、连接方式、分组与变量,默认文件名 inventory.yml(用 -i 指定其他路径)。
完整结构
vars: # 全局变量(优先级最低)
app_root: /opt/demo-app
hosts:
web1:
addr: 192.168.1.10
user: deploy
key_file: ~/.ssh/id_ed25519
vars:
role: frontend
web2:
addr: 192.168.1.11
user: deploy
db1:
addr: 192.168.1.20
port: 22022
user: admin
password: "changeme" # 建议放在 vault 加密的文件里
become_password: "changeme"
groups:
web:
hosts: [web1, web2]
vars:
nginx_port: 80
db:
hosts: [db1]主机字段
| 字段 | 说明 | 缺省值 |
|---|---|---|
addr | 连接地址(IP 或域名) | 主机名本身 |
port | SSH 端口 | 22 |
user | 登录用户 | 当前用户 |
key_file | 私钥路径(支持 ~ 展开) | 自动尝试 ssh-agent 与默认密钥 |
key_passphrase | 私钥口令 | 无 |
password | SSH 密码认证 | 无 |
become_password | sudo 密码(become 任务使用) | 无(用 sudo -n) |
vars | 主机级变量 | {} |
认证与主机密钥
认证按以下顺序尝试,命中即停止:password → key_file → ssh-agent → ~/.ssh/id_{ed25519,ecdsa,rsa}。
主机密钥按 known_hosts 校验:已知则校验、未知则自动记录(accept-new)、不匹配则拒绝连接并提示 可能存在中间人攻击。
主机选择 pattern
play 的 hosts 字段与命令行 -l/--limit 使用相同的 pattern 语法:
| 写法 | 含义 |
|---|---|
all | 全部主机 |
web | 组内全部主机 |
web1 | 单台主机 |
web1,db | 逗号分隔,主机与组可混用 |
pattern 匹配不到任何主机或组会直接报错退出(包括使用
-l 时 playbook 里的 hosts 拼写错误),不会静默跳过。加密 inventory
含密码的 inventory 建议整体加密,加密后可直接被 anx run / ping / exec 使用:
anx vault encrypt inventory.yml
anx run site.yml -i inventory.yml --ask-vault-pass详见 Vault 配置加密。