一、基础信息与连通性测试

1. ansible --version
  • 功能:查看 Ansible 版本及核心配置信息(配置文件路径、模块路径、Python 版本等)。
  • 示例:
    ansible --version
    
  • 输出说明:显示 ansible [core 2.14.3] 版本信息,以及 config file = /etc/ansible/ansible.cfg 等配置路径。
2. ansible <主机/组> -m ping
  • 功能:测试控制端与目标主机的连通性(基于 SSH 协议),是最常用的验证命令。
  • 参数说明:
    • <主机/组>:目标主机或主机组(定义在 inventory 文件中,默认路径 /etc/ansible/hosts)。
    • -m ping:指定使用 ping 模块(Ansible 内置模块,用于检测主机是否可达)。
  • 示例:
    ansible all -m ping          # 测试 inventory 中所有主机的连通性
    ansible webservers -m ping   # 测试 "webservers" 组的主机
    ansible 192.168.1.101 -m ping  # 测试单台主机(IP)
    
  • 成功输出:目标主机返回 "pong" 表示连通正常。

二、Inventory 主机清单管理

Inventory 是 Ansible 管理的主机列表,支持分组、变量定义等,默认文件为 /etc/ansible/hosts。

1. ansible-inventory --list
  • 功能:以 JSON 格式展示 inventory 中所有主机、组及变量信息,用于验证清单配置。
  • 示例:
    ansible-inventory --list          # 显示所有主机和组
    ansible-inventory --host web01    # 显示单个主机(web01)的详细信息(变量、组归属等)
    
2. ansible <主机/组> --list-hosts
  • 功能:列出指定主机或组中的所有主机(简化版 inventory 查看)。
  • 示例:
    ansible dbservers --list-hosts    # 列出 "dbservers" 组的所有主机
    ansible "web*" --list-hosts       # 列出所有以 "web" 开头的主机
    

三、模块执行命令(单任务操作)

Ansible 通过 模块(Module) 实现具体功能,使用 -m 指定模块,-a 传递模块参数,格式:
ansible <目标> -m <模块> -a "<模块参数>"

1. 命令执行模块(command/shell)
  • command:在目标主机执行命令(默认模块,不支持管道、环境变量等 shell 特性)。

    # 查看目标主机的系统时间
    ansible webservers -m command -a "date"
    
    # 查看磁盘使用率
    ansible all -m command -a "df -h"
    
  • shell:通过 shell 解释器执行命令(支持管道 |、重定向 >、变量 $HOME 等)。

    # 查看 /var 目录下的日志文件(使用管道)
    ansible dbservers -m shell -a "ls -l /var/log | grep .log"
    
    # 输出环境变量(使用 shell 特性)
    ansible all -m shell -a "echo $PATH"
    
2. 文件操作模块(file)
  • 功能:创建 / 删除文件 / 目录、修改权限、创建软链接等。
  • 常用参数:
    • path:目标路径。
    • state:状态(directory 目录、file 文件、link 软链接、absent 删除)。
    • mode:权限(如 0755)。
    • src:软链接的源路径(state=link 时使用)。
  • 示例:
    # 创建目录 /data/backup,权限 755
    ansible all -m file -a "path=/data/backup state=directory mode=0755"
    
    # 创建软链接 /tmp/nginx.conf 指向 /etc/nginx/nginx.conf
    ansible webservers -m file -a "src=/etc/nginx/nginx.conf dest=/tmp/nginx.conf state=link"
    
    # 删除文件 /tmp/test.txt
    ansible all -m file -a "path=/tmp/test.txt state=absent"
    
3. 文件拷贝模块(copy)
  • 功能:从控制端拷贝文件 / 目录到目标主机,支持权限设置、内容替换等。
  • 常用参数:
    • src:控制端的源路径(本地文件)。
    • dest:目标主机的目标路径。
    • mode:文件权限(如 0644)。
    • content:直接写入内容到目标文件(无需本地文件)。
  • 示例:
    # 拷贝本地的 nginx.conf 到目标主机的 /etc/nginx/ 目录
    ansible webservers -m copy -a "src=/local/nginx.conf dest=/etc/nginx/nginx.conf mode=0644"
    
    # 直接创建文件 /etc/motd,内容为 "Welcome to Server"
    ansible all -m copy -a "content='Welcome to Server' dest=/etc/motd mode=0644"
    
4. 包管理模块(yum/apt)
  • yum:适用于 CentOS/RHEL 系统,管理 RPM 包。

    # 安装 nginx(state=present 表示安装)
    ansible webservers -m yum -a "name=nginx state=present"
    
    # 卸载 httpd(state=absent 表示卸载)
    ansible all -m yum -a "name=httpd state=absent"
    
    # 更新所有包(谨慎使用)
    ansible all -m yum -a "name=* state=latest"
    
  • apt:适用于 Debian/Ubuntu 系统,管理 DEB 包。

    # 安装 mysql-server,同时更新 apt 缓存
    ansible dbservers -m apt -a "name=mysql-server state=present update_cache=yes"
    
5. 服务管理模块(service)
  • 功能:启动、停止、重启服务,设置开机自启。
  • 常用参数:
    • name:服务名称(如 nginx、mysql)。
    • state:状态(started 启动、stopped 停止、restarted 重启、reloaded 重载)。
    • enabled:是否开机自启(yes/no)。
  • 示例:
    # 启动 nginx 并设置开机自启
    ansible webservers -m service -a "name=nginx state=started enabled=yes"
    
    # 重启 mysql 服务
    ansible dbservers -m service -a "name=mysql state=restarted"
    
6. 用户管理模块(user)
  • 功能:创建 / 删除用户、修改用户属性( uid、组、家目录等)。
  • 常用参数:
    • name:用户名。
    • state:present(创建)、absent(删除)。
    • uid:用户 ID。
    • group:主组。
    • groups:附加组(逗号分隔)。
    • shell:默认 shell(如 /bin/bash)。
    • remove:删除用户时是否清理家目录(yes/no,配合 state=absent 使用)。
  • 示例:
    # 创建用户 appuser,uid 1001,主组 appgroup,附加组 wheel
    ansible all -m user -a "name=appuser uid=1001 group=appgroup groups=wheel shell=/bin/bash state=present"
    
    # 删除用户 appuser 并清理家目录
    ansible all -m user -a "name=appuser state=absent remove=yes"
    

四、Playbook 相关命令(多任务编排)

Playbook 是 Ansible 的任务剧本(YAML 格式),用于批量执行复杂任务(如部署应用、配置服务),支持变量、条件、循环等逻辑。

1. ansible-playbook <playbook.yml>
  • 功能:运行指定的 Playbook 文件。
  • 常用选项:
    • -i <inventory>:指定自定义 inventory 文件路径(默认 /etc/ansible/hosts)。
    • -u <user>:指定远程执行的用户(默认使用当前用户)。
    • -k:提示输入 SSH 密码(当目标主机未配置密钥登录时)。
    • -K(大写):提示输入 sudo 密码(当需要 root 权限时)。
    • --tags <tag>:只执行 Playbook 中带有指定标签的任务。
    • --skip-tags <tag>:跳过带有指定标签的任务。
    • --check:模拟执行(Dry Run),不实际修改系统,用于验证剧本。
    • -v:显示详细输出(-vvv 最详细,用于调试)。
  • 示例:
    # 运行 deploy.yml 剧本
    ansible-playbook deploy.yml
    
    # 使用自定义 inventory 文件 ./my_hosts,以 root 用户执行
    ansible-playbook -i ./my_hosts -u root site.yml
    
    # 只执行标签为 "install" 的任务
    ansible-playbook --tags "install" setup.yml
    
    # 模拟执行,检查剧本是否有错误
    ansible-playbook --check config.yml
    
2. ansible-playbook --syntax-check <playbook.yml>
  • 功能:检查 Playbook 的语法是否正确(快速验证,不执行任务)。
  • 示例:
    ansible-playbook --syntax-check site.yml
    

五、其他核心命令

1. ansible-doc <模块名>
  • 功能:查看模块的帮助文档(包括参数说明、示例、返回值等),是学习模块的关键工具。
  • 选项:
    • -s:显示简洁的参数说明(常用)。
  • 示例:
    ansible-doc copy          # 查看 copy 模块的完整文档
    ansible-doc -s service    # 简洁显示 service 模块的参数
    
2. ansible-vault
  • 功能:加密 / 解密敏感文件(如包含密码、API 密钥的配置文件),防止信息泄露。
  • 常用子命令:
    • create:创建新的加密文件。
    • encrypt:加密现有文件。
    • decrypt:解密文件(需密码)。
    • edit:编辑加密文件(自动解密→编辑→重新加密)。
    • view:查看加密文件内容。
  • 示例:
    # 创建加密文件 secrets.yml(会提示设置密码)
    ansible-vault create secrets.yml
    
    # 加密现有文件 db_pass.txt
    ansible-vault encrypt db_pass.txt
    
    # 编辑加密文件(需输入密码)
    ansible-vault edit secrets.yml
    
    # 运行包含加密文件的 Playbook(需输入解密密码)
    ansible-playbook --ask-vault-pass deploy.yml
    
3. ansible-galaxy
  • 功能:管理 Ansible 角色(Roles)—— 可复用的任务集合(如安装 Nginx、MySQL 的标准化角色)。支持从 Ansible Galaxy 仓库下载公共角色。
  • 常用子命令:
    • install:安装角色。
    • list:列出已安装的角色。
    • remove:删除角色。
  • 示例:
    # 安装 geerlingguy.nginx 角色(用于部署 Nginx)
    ansible-galaxy install geerlingguy.nginx
    
    # 列出所有已安装的角色
    ansible-galaxy list
    
    # 删除角色 geerlingguy.nginx
    ansible-galaxy remove geerlingguy.nginx
    

总结

Ansible 命令的核心使用场景分为两类:

  1. 单任务快速执行:通过 ansible <目标> -m <模块> -a <参数> 实现简单操作(如执行命令、拷贝文件)。
  2. 复杂任务编排:通过 ansible-playbook 运行 Playbook,实现多步骤自动化(如应用部署、环境初始化)。
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐