🔧

Ansible 命令速查

Ansible 常用命令速查,覆盖 Ad-hoc、Playbook、模块、Vault 与排障

🔍
68 条命令

Ad-hoc 临时命令

ansible <主机组> -m ping -i <清单文件>

连通性测试,验证 SSH 与 Python 环境是否就绪

示例ansible webservers -m ping -i hosts.ini
ansible <主机组> -a "<命令>" -i <清单文件>

不指定模块时默认 command,注意不支持管道与重定向

示例ansible webservers -a "uptime" -i hosts.ini
ansible <主机组> -m shell -a "<命令>"

需要管道、重定向、变量时用 shell 模块

示例ansible webservers -m shell -a "ps aux | grep nginx | head -5"
ansible <主机组> -m ping -u <用户> --become -K

以指定用户登录并提权,执行前提示输入 sudo 密码

示例ansible all -m ping -u deploy -b -K
ansible <主机组> -m copy -a "src=<本地> dest=<远程>"

临时分发单个文件到目标主机

示例ansible webservers -m copy -a "src=./nginx.conf dest=/etc/nginx/"
ansible <主机组> -m reboot

批量重启主机并等待恢复

示例ansible webservers -m reboot
ansible <主机组> -f 20 -m ping

把并发数从默认 5 提到 20,批量执行更快

示例ansible all -m ping -f 20
ansible <主机组> -m setup

收集并输出目标主机的全部 Facts 信息

示例ansible webservers -m setup

📋 主机清单

ansible-inventory -i <清单文件> --list

以 JSON 输出解析后的清单,检查变量是否生效

示例ansible-inventory -i hosts.ini --list
ansible-inventory -i <清单文件> --graph

树状展示分组与主机层级关系

示例ansible-inventory -i hosts.ini --graph
ansible-inventory -i <清单文件> --host <主机名>

查看单台主机最终生效的变量(含继承的)

示例ansible-inventory -i hosts.ini --host web01
ansible <主机组> --list-hosts -i <清单文件>

列出该组匹配到的主机,验证通配与分组是否正确

示例ansible "web*01:!db" --list-hosts -i hosts.ini
ansible --version

查看版本与配置文件搜索路径

示例ansible --version

📖 Playbook 执行

ansible-playbook <文件>

执行 Playbook

示例ansible-playbook site.yml -i hosts.ini
ansible-playbook <文件> --syntax-check

只做 YAML 语法体检,不连接主机

示例ansible-playbook site.yml --syntax-check
ansible-playbook <文件> --check --diff

演练模式,输出将要发生的变更但不真正执行

示例ansible-playbook site.yml --check --diff
ansible-playbook <文件> --limit <主机>

只对该主机或组执行,配合新上线机器很常用

示例ansible-playbook site.yml --limit web01
ansible-playbook <文件> --tags <标签>

只跑打了指定标签的任务

示例ansible-playbook site.yml --tags nginx
ansible-playbook <文件> --skip-tags <标签>

跳过指定标签的任务

示例ansible-playbook site.yml --skip-tags reboot
ansible-playbook <文件> --start-at-task "<任务名>"

从某个任务开始执行,重跑中断的 Playbook 很省时间

示例ansible-playbook site.yml --start-at-task "安装 nginx"
ansible-playbook <文件> -v|-vv|-vvv|-vvvv

逐级提升输出详细程度,-vvvv 可看到 SSH 连接细节

示例ansible-playbook site.yml -vvv
ansible-playbook <文件> -e "<键>=<值>"

从命令行传变量,优先级最高

示例ansible-playbook site.yml -e "env=prod version=1.2.0"
ansible-playbook <文件> --step

逐任务确认后再执行,谨慎操作时用

示例ansible-playbook site.yml --step
ansible-playbook <文件> --ask-vault-pass

运行时提示输入 Vault 密码,解密加密变量

示例ansible-playbook site.yml --ask-vault-pass

🧰 常用模块

ansible-doc -l

列出所有可用模块,可按关键字过滤

示例ansible-doc -l | grep docker
ansible-doc -s <模块名>

查看模块参数说明与示例(SNIPPET)

示例ansible-doc -s ansible.builtin.copy
ansible.builtin.copy

分发文件到目标主机,content 可直接写内容

示例ansible all -m ansible.builtin.copy -a "content='hello' dest=/tmp/a.txt"
ansible.builtin.template

渲染 Jinja2 模板后分发,适合带变量的配置文件

示例ansible all -m ansible.builtin.template -a "src=nginx.conf.j2 dest=/etc/nginx/nginx.conf"
ansible.builtin.file

创建目录、改权限、建软链接

示例ansible all -m ansible.builtin.file -a "path=/data state=directory mode=0755"
ansible.builtin.yum / apt

包管理,state 取 present/latest/absent

示例ansible all -m ansible.builtin.apt -a "name=nginx state=present"
ansible.builtin.service

管理系统服务,常用 state=restarted enabled=yes

示例ansible all -m ansible.builtin.service -a "name=nginx state=restarted enabled=true"
ansible.builtin.lineinfile

修改或插入单行配置,避免整文件覆写

示例ansible all -m ansible.builtin.lineinfile -a "path=/etc/hosts line='10.0.0.1 db'"
ansible.builtin.command + creates

幂等执行:产物已存在则跳过,重复跑不出错

示例ansible all -m ansible.builtin.command -a "tar -xf /tmp/a.tar creates=/opt/a"
ansible.builtin.user

创建用户、配密钥、加属组

示例ansible all -m ansible.builtin.user -a "name=deploy groups=wheel shell=/bin/bash"
ansible.builtin.cron

管理计划任务

示例ansible all -m ansible.builtin.cron -a "name='备份' minute=0 hour=3 job=/opt/bak.sh"

🔤 变量与 Facts

ansible <主机组> -m setup -a "filter=<关键字>*"

只查看某一类 Facts,如内存、网卡

示例ansible all -m setup -a "filter=ansible_mem*"
ansible localhost -m debug -a "msg={{ hostvars['<主机>']['<变量>'] }}"

查看某台主机的指定变量值

示例ansible localhost -m debug -a "msg={{ hostvars['web01']['ansible_host'] }}"
ansible localhost -m debug -a "var=<变量>"

打印单个变量内容并用 YAML 展开(适合查字典)

示例ansible localhost -m debug -a "var=groups"
ansible-playbook <文件> -e @vars.yml

从外部文件加载变量,@ 不能漏

示例ansible-playbook site.yml -e @prod.yml
gather_facts: false

Playbook 中关掉 Facts 收集,纯下发任务时提速明显

示例- hosts: all gather_facts: false
ansible-playbook <文件> --flush-cache

忽略 facts 缓存重新采集

示例ansible-playbook site.yml --flush-cache

🎭 Role 与 Galaxy

ansible-galaxy role init <名称>

按标准目录结构创建 Role 骨架

示例ansible-galaxy role init roles/nginx
ansible-galaxy role list

查看已安装的 Role 及版本

示例ansible-galaxy role list
ansible-galaxy role install <作者>.<名称>

从 Galaxy 社区安装 Role

示例ansible-galaxy role install geerlingguy.nginx
ansible-galaxy install -r requirements.yml --force

按依赖清单批量安装,--force 覆盖旧版本

示例ansible-galaxy install -r requirements.yml --force
ansible-galaxy collection install <命名空间>.<集合>

安装集合,如 community.general、ansible.posix

示例ansible-galaxy collection install community.general
ansible-galaxy collection list

查看已安装集合及其路径

示例ansible-galaxy collection list

🔐 Vault 加密

ansible-vault create <文件>

新建并加密一个变量文件

示例ansible-vault create secrets.yml
ansible-vault edit <文件>

在编辑器中修改已加密文件

示例ansible-vault edit secrets.yml
ansible-vault view <文件>

查看明文内容但不落盘

示例ansible-vault view secrets.yml
ansible-vault encrypt <文件>

把明文文件就地加密,入库前先做这一步

示例ansible-vault encrypt group_vars/all.yml
ansible-vault decrypt <文件>

解密为明文,注意之后别误提交到仓库

示例ansible-vault decrypt secrets.yml
ansible-vault encrypt_string '<密文>' --name <变量名>

生成单行加密串,可直接贴进普通 vars 文件

示例ansible-vault encrypt_string 'S3cret' --name db_password
ansible-vault rekey <文件>

更换 Vault 密码

示例ansible-vault rekey secrets.yml
--vault-password-file <路径>

用密码文件而非交互输入,便于 CI 自动化

示例ansible-playbook site.yml --vault-password-file ~/.vault_pass

🔧 配置与调优

ansible-config dump --only-changed

查看当前生效且非默认的配置,排查配置冲突首选

示例ansible-config dump --only-changed
ansible-config view

打印正在使用的 ansible.cfg 内容

示例ansible-config view
ansible-config init --disabled > ansible.cfg

生成含全部默认项的参考配置(均注释状态)

示例ansible-config init --disabled -t all > ansible.cfg
ANSIBLE_HOST_KEY_CHECKING=False ansible <组> -m ping

临时跳过 SSH 首次连接的指纹确认,仅建议在内网新机器用

示例ANSIBLE_HOST_KEY_CHECKING=False ansible all -m ping
export ANSIBLE_STDOUT_CALLBACK=yaml

把输出改成 YAML 格式,多行内容更好读

示例export ANSIBLE_STDOUT_CALLBACK=yaml
pipelining = True # ansible.cfg [ssh_connection]

减少 SSH 往返次数,大批量执行时可显著提速

示例[ssh_connection] pipelining = True

🩺 调试与排障

ansible-playbook <文件> -vvv

详细模式,能看到每个任务的返回结构

示例ansible-playbook site.yml -vvv
ansible-playbook <文件> -vvvv

连接级调试,SSH 认证失败、超时时用它

示例ansible-playbook site.yml -vvvv
ansible-lint <文件>

静态检查 Playbook 写法与最佳实践,建议进 CI

示例ansible-lint site.yml
ansible <组> -m command -a "python3 --version"

确认目标机 Python 解释器可用(最常见失败原因)

示例ansible all -m command -a "python3 --version"
ansible <组> -m ping -vvvv 2>&1 | grep -i "permission\|auth"

快速定位 SSH 认证类报错

示例ansible all -m ping -vvvv 2>&1 | grep -i permission
ANSIBLE_DEBUG=1 ansible-playbook <文件>

打开内部调试日志,只在疑难故障时开

示例ANSIBLE_DEBUG=1 ansible-playbook site.yml
ANSIBLE_LOG_PATH=./ansible.log ansible-playbook <文件>

把运行日志落盘便于事后分析

示例ANSIBLE_LOG_PATH=./ansible.log ansible-playbook site.yml

Ansible 命令速查怎么用

Ansible 与 ansible-playbook 常用命令速查,含 inventory、vault 与常用模块。

  1. 按场景搜索命令
  2. 点击复制
  3. 替换主机组与剧本路径

小贴士加 --check 可以先演练不真正落地,改线上前必用。

Ansible 命令速查常见问题

Ansible 命令速查是免费的吗?

完全免费,无需注册登录,也不限使用次数。997 工具箱所有工具都不收费。

使用Ansible 命令速查会把我的数据上传到服务器吗?

不会。Ansible 命令速查在浏览器本地完成计算,输入的文本和文件都不会离开你的设备,页面关闭后数据即消失。

Ansible 命令速查在手机上能用吗?

可以。页面做了移动端适配,手机和平板的浏览器打开同样能正常使用,也不需要安装任何 App。