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

远程PowerShell双跳问题 明文凭证存储方案访问被拒排查

跨服务器SSIS调用Python脚本双跳问题排查

场景说明

服务器A通过SSIS执行进程步骤运行PowerShell命令,调用部署在服务器B上的Python脚本,该Python脚本需要通过Windows身份验证回连服务器A上的SQL Server。

初始失败方案

初始调用命令如下,执行直接失败:

Invoke-Command -ComputerName ServerB -FilePath '\\ServerB\MyPythonScript.py'

失败原因为典型的Kerberos双跳问题:Windows凭证仅能传递到第一层远程PowerShell会话,无法继续向后透传给SQL Server连接请求。

调整后的概念验证方案

为快速验证链路可行性,临时采用明文传入指定凭证的方式启动Python脚本(验证通过后会替换为更高安全等级的实现),调整后调用命令如下:

Invoke-Command -ComputerName ServerB -FilePath '\\ServerB\MyPowerShellWrapper.ps1'

配套的MyPowerShellWrapper.ps1脚本内容:

$Username   = 'BLAH'
$Password   = ConvertTo-SecureString -String 'FOO' -AsPlainText -Force
[pscredential]$cred = New-Object System.Management.Automation.PSCredential ($userName, $Password)
Start-Job -Name PythonJob -Scriptblock {python.exe 'C:\MyPythonScript.py'} -Credential $cred
Wait-Job -Name Pythonjob

当前报错

调整后方案依然执行失败,PowerShell返回错误:

An error occurred while starting the background process. Error reported: Access is denied.(启动后台进程时发生错误,返回报错:访问被拒绝)


报错根因与修复方式

当前配置存在3个核心遗漏点,按优先级排查即可:

  1. 远程会话权限不足
    通过Invoke-Command建立的远程PowerShell会话默认以网络登录身份运行,Start-Job -Credential参数会调用本地作业调度服务以指定身份创建独立进程,要求发起远程连接的SSIS运行账号满足两个条件:
    • 在服务器B上被加入Remote Management Users本地组
    • 被组策略授予作为批处理作业登录的权限
      如果使用的是本地账号而非域账号,还需要在服务器B上将注册表项HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy设置为1,关闭UAC远程令牌过滤限制。
  2. 目标运行账号权限缺失
    传入的BLAH账号需要在服务器B上满足以下权限要求:
    • 拥有作为批处理作业登录权限
    • 对Python解释器可执行文件、C:\MyPythonScript.py脚本路径拥有读取、执行权限
    • 对服务器A上的目标SQL Server实例拥有对应的Windows身份验证访问权限
  3. 脚本本身存在笔误+实现方式冗余
    脚本里存在逻辑瑕疵:Wait-Job指定的作业名是Pythonjob,和之前定义的PythonJob名称不一致,会导致等待逻辑失效。另外远程会话中使用Start-Job创建后台作业本身会额外增加一层权限校验,完全没必要,验证阶段可以直接替换为Start-Process拉起进程,权限要求更低、日志更易排查,修改后的wrapper脚本如下:
    $Username   = 'BLAH'
    $Password   = ConvertTo-SecureString -String 'FOO' -AsPlainText -Force
    [pscredential]$cred = New-Object System.Management.Automation.PSCredential ($Username, $Password)
    $runProc = Start-Process -FilePath "python.exe" -ArgumentList "C:\MyPythonScript.py" -Credential $cred -Wait -NoNewWindow -PassThru
    exit $runProc.ExitCode
    

安全提示:明文硬编码密码仅可用于临时功能验证,正式环境请优先配置Kerberos约束委派(为服务器B的机器账号授予到服务器A SQL服务的委派权限,从根源解决双跳问题,无需传递任何凭证),或使用gMSA组托管服务账号、DPAPI加密存储凭证替代明文方案,避免账号泄露风险。


内容的提问来源于stack exchange,提问作者Cazzym Hawkins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:51:27