Terraform部署Windows Server2016通过WinRM执行脚本超时如何解决
WinRM 5985端口连接超时排查解决步骤
1. 网络链路排查
- 检查关联VM的网络安全组(NSG)入站规则:必须放行了执行terraform命令的设备公网IP的TCP 5985端口入站权限,默认Windows镜像的NSG不会主动开放该端口。
- 本地验证端口连通性:在执行terraform的设备上执行命令
Test-NetConnection <VM公网IP> -Port 5985,确认端口可正常连通。 - 检查本地网络出站限制:部分企业内网会封禁5985这类非常用端口的出站请求,可切换手机热点等公网环境二次验证。
2. 虚拟机内部WinRM配置排查
默认Windows Server 2016镜像没有开启WinRM服务和相关权限,这是该报错的最高发原因
- 需要通过自定义数据(custom_data)在VM初始化阶段自动完成WinRM配置,在
azurerm_windows_virtual_machine资源块中添加如下配置:
custom_data = base64encode(<<-EOF <powershell> # 放通WinRM防火墙规则 Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any # 开启PS远程管理 Enable-PSRemoting -Force # 配置信任主机列表 Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*" -Force # 允许非加密传输、开启基础认证,匹配你当前的WinRM连接参数 winrm set winrm/config/service '@{AllowUnencrypted="true"}' winrm set winrm/config/service/auth '@{Basic="true"}' # 重启WinRM服务生效 Restart-Service WinRM </powershell> EOF )
- 调整超时时间:Standard_B1s规格的虚拟机启动速度较慢,可将provisioner中的
timeout参数从5m调整为10m,预留足够的初始化时间。 - 临时验证方案:可通过Azure门户的串行控制台直接登录VM,手动执行上述PowerShell配置命令,确认WinRM开启后再重新执行terraform apply。
3. 连接参数校验
- 确认WinRM连接参数匹配:你当前使用的是HTTP协议、5985端口、非HTTPS模式,需要和上述WinRM配置保持一致,不要混用HTTPS 5986端口的配置参数。
- 确认管理员账号密码正确:避免因多次密码错误触发系统安全策略,临时拦截连接请求。
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

