如何通过Unix平台运行的Ansible管理Windows服务器上的SQL Server
问题排查与解决步骤
- 第一步:确认端口对应服务,修正连接协议
Ansible默认使用SSH协议连接远程主机,你遇到的SSH连接超时但telnet端口通的核心原因是:telnet仅验证TCP层连通性,无法验证上层协议是否匹配。你需要先确认Windows主机1515端口运行的上层服务:- 若为SSH服务:需先手动执行
ssh ansible@DBSERVER -p 1515验证能否正常登录,排查SSH服务配置、密钥/密码认证、防火墙规则是否正常。 - 若为WinRM服务(Ansible管理Windows的推荐协议):你需要先在Windows主机上执行命令启用WinRM配置:
后续在资产清单中补充WinRM连接配置,不能使用默认的SSH协议。Enable-PSRemoting -Force Set-Item WSMan:\localhost\Service\AllowUnencrypted $true Set-Item WSMan:\localhost\Service\Auth\Basic $true
- 若为SSH服务:需先手动执行
- 第二步:修正资产清单配置
以WinRM连接为例,你的资产清单需要调整为如下格式:
[dbserver] DBSERVER ansible_port=1515 ansible_user=ansible ansible_password=你的Windows账号密码 ansible_connection=winrm ansible_winrm_transport=ntlm ansible_winrm_server_cert_validation=ignore
注意:生产环境建议使用Ansible Vault加密明文密码,避免敏感信息泄露。
- 第三步:先验证主机连通性再执行业务任务
配置完成后先执行连通性测试命令:ansible dbserver -m win_ping
返回SUCCESS => {"changed": false, "ping": "pong"}则证明连接配置正常。 - 第四步:优化Playbook任务写法
连接正常后,建议将shell模块替换为Ansible Windows专属的win_shell模块,同时提前确认目标Windows主机已经安装SqlServer PowerShell模块,否则invoke-sqlcmd命令会执行失败:
--- - hosts: all tasks: - name: 连接SQL Server执行测试查询 win_shell: "invoke-sqlcmd -username \"username\" -password \"password\" -Query \"SELECT 1\""
内容的提问来源于stack exchange,提问作者vector8188
相关产品推荐
相关产品推荐

