ansible本身不支持远程开机,因linux无法通过ssh触发物理上电;但可通过ipmi(如ipmitool)、容器、虚拟机或windows winrm实现批量关机、重启及特定场景开机。

Ansible 本身不直接支持“开机”,因为标准 Linux 系统无法通过 SSH 远程触发物理上电;但关机、重启、以及对带外管理(如 IPMI)或容器/虚拟机的启动控制,完全可以批量实现。关键在于区分目标类型和管理通道。
普通物理服务器/虚拟机:批量关机与重启
这是最常用场景,依赖 SSH 和系统命令,操作简单可靠:
- 使用 ad-hoc 命令快速关机:
ansible webservers -m command -a "shutdown -h now"(webservers是 inventory 中主机组名) - 用 Playbook 实现更可控的关机流程,例如加入延迟、通知或服务预停:
- name: 优雅关机<br> hosts: all<br> become: yes<br> tasks:<br> - name: 停止关键服务<br> service:<br> name: nginx<br> state: stopped<br> - name: 等待10秒<br> wait_for:<br> timeout: 10<br> - name: 执行关机<br> command: shutdown -h now<br> ignore_errors: true
- 重启可直接用
reboot模块(推荐),它会自动等待主机下线再上线,比 shell 命令更健壮:ansible webservers -m reboot -a "msg='维护重启' post_reboot_delay=30"
带外管理设备(如支持 IPMI 的服务器):真正远程开机
当服务器断电后仍需远程启动时,必须借助 BMC(基板管理控制器),常用工具是 ipmitool:
- 确保目标服务器已配置 IPMI 并开放 LAN 接口,且 Ansible 控制节点能访问其管理 IP
- 单台测试命令:
ipmitool -H 192.168.10.100 -U admin -P password power on(加-I lanplus更兼容) - 批量开机建议写成脚本或 Playbook 调用
shell模块,例如:- name: 批量开机(IPMI)<br> hosts: ipmi_servers<br> gather_facts: false<br> tasks:<br> - name: 启动服务器<br> shell: ipmitool -H "{{ ipmi_ip }}" -U "{{ ipmi_user }}" -P "{{ ipmi_pass }}" -I lanplus power on<br> vars:<br> ipmi_ip: "{{ hostvars[inventory_hostname].ipmi_address | default(inventory_hostname) }}"<br> ipmi_user: "admin"<br> ipmi_pass: "your_password" - 注意:IPMI 用户需提前创建并授权,可用
ipmitool user系列命令批量初始化
Docker 容器:模拟开关机行为
容器没有传统电源概念,“开关机”实为启停容器,适合测试或轻量服务编排:
- 使用
community.docker.docker_container模块(需安装集合:ansible-galaxy collection install community.docker) - Playbook 示例支持变量驱动动作:
- name: 控制容器状态<br> hosts: localhost<br> gather_facts: false<br> vars:<br> container_name: "webapp"<br> action: "stopped" # 可设为 started / restarted<br> tasks:<br> - name: 操作容器<br> community.docker.docker_container:<br> name: "{{ container_name }}"<br> state: "{{ action }}" - 执行时传参灵活:
ansible-playbook power_manage.yml --extra-vars "action=started"
Windows 主机:需额外适配
Ansible 支持 Windows,但关机方式不同,需启用 WinRM 并使用 win_shell 或 win_command:
- 确保目标 Windows 已配置 WinRM(推荐 HTTPS + Basic Auth 或 Kerberos)
- 关机命令示例:
win_shell: shutdown /s /t 0 /f(强制立即关机) - 开机不可行(无带外支持时),但可配合 Hyper-V 或 VMware API 实现虚拟机启停
- 建议在 inventory 中单独分组(如
[windows]),避免与 Linux 混用模块











