🔧 Ansible 管理 Windows 服务器配置指南

🔧 Ansible 管理 Windows 服务器配置指南
乔阳问题背景
在实际工作中,需要管理多台 Windows 服务器,每次执行相同的配置操作都需要逐台连接服务器重复执行。例如批量安装软件、修改系统配置、部署应用程序等操作,都需要通过远程桌面逐台登录,手动执行相同的命令或操作步骤。
由于配置变更并非高频操作,这种低效的工作方式持续了近两年时间。相比 Linux 系统可以通过 SSH 批量执行脚本,Windows 服务器在批量管理方面存在诸多不便,缺乏统一的自动化管理方案。故下定决心要解决这个问题。
本文将介绍如何使用 Ansible 自动化工具解决这一问题,实现从 Linux 主机统一管理多台 Windows 服务器的目标。通过 WinRM 协议建立连接,无需在 Windows 服务器上安装额外的客户端软件,即可实现批量配置管理和命令执行。
环境说明
- ✅ 控制节点:Linux(Ubuntu)系统,安装 Ansible
- ✅ 被管理节点:5 台 Windows 服务器
- ✅ 通信协议:WinRM(Windows Remote Management)
- ✅ Windows 服务器无需安装 Ansible 客户端
💡 说明:本文演示环境使用 1 台 Windows 服务器进行配置测试,实际生产环境中管理 5 台服务器。配置方法完全相同,后续添加服务器只需重复相应步骤即可。
步骤一:🐧 Linux 控制节点配置
安装 Ansible
在 Ubuntu 系统上执行以下命令安装 Ansible:
1 | sudo apt-get update && sudo apt-get install ansible |
创建主机清单配置
创建 Ansible 主机清单文件:
1 | sudo touch /etc/ansible/hosts |
编辑 /etc/ansible/hosts 文件,添加 Windows 服务器配置:
1 | [windows_servers] |
参数说明:
ansible_connection=winrm:指定使用 WinRM 协议连接ansible_winrm_transport=basic:使用基本认证方式ansible_winrm_server_cert_validation=ignore:忽略证书验证(内网环境)ansible_port=5985:WinRM HTTP 端口
配置认证信息
创建主机变量文件存储认证信息:
1 | sudo touch /etc/ansible/host_vars/win-host1.yml |
编辑 win-host1.yml 文件,写入认证配置:
1 | ansible_user: test |
验证配置结构
此时 Ansible 配置目录结构如下:
1 | /etc/ansible |
步骤二:🪟 Windows 服务器配置
配置网络类型
WinRM 服务要求网络类型为”专用”或”域”网络。
- 打开”设置” → “网络和 Internet” → “以太网”
- 点击当前网络连接
- 将网络配置文件更改为”专用网络”
创建用户组
为 Ansible 管理创建专用用户组:
- 打开”计算机管理” → “本地用户和组” → “组”
- 创建新组
ansible - 将需要远程管理的用户添加到该组
启用 WinRM 服务
⚠️ 安全提示:Ansible 官方在 GitHub 提供了自动化配置脚本 ConfigureRemotingForAnsible.ps1,但出于安全考虑,建议手动执行必要的命令。
以管理员权限打开 PowerShell,依次执行以下命令:
1 | # 启用 WinRM 服务 |
命令执行结果参考:
看到监听器正常运行在 5985 端口,即表示 WinRM 配置完成。
步骤三:✅ 连接测试
返回 Linux 控制节点,执行连通性测试:
1 | ansible windows_servers -m win_ping |
预期输出:
1 | win-host1 | SUCCESS => { |
返回 SUCCESS 和 pong 响应,表示 Ansible 已成功连接到 Windows 服务器。
注意事项
⚠️ 安全提醒:本文配置使用基本认证和明文传输方式,仅适用于内网测试环境。生产环境建议使用 HTTPS(端口 5986)配合证书认证,并定期更新认证凭据。
扩展:添加更多 Windows 服务器
完成首台服务器配置后,添加其他 Windows 服务器非常简单,只需两步操作:
第一步:添加主机配置
编辑 /etc/ansible/hosts 文件,在 [windows_servers] 组中添加新主机:
1 | [windows_servers] |
第二步:创建认证配置
为每台新增服务器在 /etc/ansible/host_vars/ 目录下创建对应的认证文件:
1 | sudo touch /etc/ansible/host_vars/win-host2.yml |
分别编辑各文件,写入对应服务器的认证信息:
1 | # win-host2.yml |
第三步:配置新服务器
在每台新增的 Windows 服务器上重复”步骤二”的配置操作:
- 配置网络类型为”专用”
- 创建 ansible 用户组并添加用户
- 执行 PowerShell 命令启用 WinRM 服务
批量测试连接
配置完成后,可以一次性测试所有服务器的连接状态:
1 | ansible windows_servers -m win_ping |
预期输出:
1 | win-host1 | SUCCESS => { "changed": false, "ping": "pong" } |
此时即可通过 Ansible 统一管理所有 Windows 服务器,实现批量配置和命令执行。
常见问题
问题:Windows 系统版本不支持
解决方案:
- ❌ Windows LTSC 版本功能精简过度,部分 Ansible 模块无法正常运行
- ❌ Windows Home 版本无法启用 WinRM 服务
- ✅ 推荐使用 Windows Server 版或专业版/企业版
问题:执行 win_ping 时提示连接超时
解决方案:
- 检查网络连通性,确保 Linux 主机能 ping 通 Windows 服务器
- 确认 5985 端口在 Windows 防火墙中已放行
- 检查网络设备(路由器、交换机)是否阻止 WinRM 通信
- 验证 WinRM 服务是否正常运行:
winrm e winrm/config/listener
问题:认证失败
解决方案:
- 确认用户名密码正确,注意密码中的特殊字符需要用引号包裹
- 验证用户已加入
Remote Management Users组 - 检查 WinRM 是否启用了基本认证:
winrm get winrm/config/service/auth
问题:提示网络类型不正确
解决方案:将 Windows 网络配置文件更改为”专用”或”域”网络,不能使用”公用”网络
















