You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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配置:
      Enable-PSRemoting -Force
      Set-Item WSMan:\localhost\Service\AllowUnencrypted $true
      Set-Item WSMan:\localhost\Service\Auth\Basic $true
      
      后续在资产清单中补充WinRM连接配置,不能使用默认的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:18:04