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

GitLab CI/CD执行New-PSSession跨Windows连接失败求助

解决方案

针对GitLab CI/CD执行PowerShell远程脚本时出现的WinRM 0x8009030d错误,可按以下步骤排查修复:

1. 显式指定WinRM身份验证方式

脚本中New-PSSession默认使用Negotiate认证,在CI/CD的非交互式服务账户环境下,容易因Kerberos验证失败触发错误。修改为NTLM认证,适配本地管理员账户场景:

# 替换原New-PSSession行
$session = New-PSSession -ComputerName $remoteServer -Credential $credential -Authentication NTLM -SessionOption (New-PSSessionOption -SkipCNCheck)

2. 调整GitLab Runner的运行账户权限

GitLab Runner默认以Local System账户运行时,无网络身份验证权限,无法发起WinRM远程连接。需切换为具备本地管理员权限的账户:

  • 打开Windows服务管理器,找到GitLab Runner服务
  • 右键选择「属性」→「登录」选项卡
  • 选择「此账户」,输入有权限的本地/域账户及密码,重启服务

3. 配置远程服务器WinRM允许本地账户访问

在目标Windows服务器上执行以下命令,开启NTLM认证及非加密访问(若未配置HTTPS):

# 启用NTLM身份验证
Set-Item WSMan:\localhost\Service\Auth\NTLM -Value $true
# 允许非加密连接(临时方案,建议后续配置HTTPS加密)
Set-Item WSMan:\localhost\Service\AllowUnencrypted -Value $true

4. 修复TrustedHosts覆盖问题

原脚本会直接覆盖TrustedHosts配置,可能导致Runner环境中其他可信主机设置丢失,改为追加模式:

# 替换原Set-Item行
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "$((Get-Item WSMan:\localhost\Client\TrustedHosts).Value),$remoteServer" -Force

5. 安全存储凭据(可选但推荐)

避免脚本硬编码密码,使用GitLab CI/CD变量存储敏感信息:

  • 在GitLab项目「设置」→「CI/CD」→「变量」中添加REMOTE_SERVER_PASSWORD变量
  • 脚本中引用变量:
$password = $env:REMOTE_SERVER_PASSWORD

内容的提问来源于stack exchange,提问作者op-code

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:32:02