繁体   English   中英

Powershell远程处理-无法以其他用户身份执行exe

[英]Powershell remoting - cannot execute an exe as another user

我有一个命令行程序(c#),它根据机器密钥对配置文件进行加密。 Powershell脚本会将内部版本复制到目标服务器,并相应地修改配置并安装Windows服务。 所有Windows服务都以本地系统帐户(标准用户,非管理员)运行-我们将此帐户称为“ locuser”。

目标服务器是Win 2012 R2服务器。 通过将PS从Build Server远程移动到此Target服务器,可以实现上述所有功能。

现在,我需要以“ locuser”身份运行加密命令行程序,以便该程序可以使用帐户特定的密钥进行加密。 我知道可以通过使用-Credentials参数调用Start-Process cmdlet轻松实现。 好吧,这是要解决的问题,如果我远程(RDP)到目标服务器,然后运行Start-Process .... -Credential $cred从Powershell控制台中获得Start-Process .... -Credential $cred ,上述方法就可以正常工作。

但是,当我在部署时(使用脚本)远程登录到TargetServer时,我需要这样做。 当我远程访问TargetServer时,我使用具有Admin特权的凭据。

我尝试了以下

  1. 通过使用Set-PSSessionConfiguration -Name Microsoft.PowerShell -ShowSecurityDescriptorUI命令,我已经向“ locuser”授予了“完全控制”和“调用(执行)”权限。 我已经为Microsoft.PowershellMicrosoft.Powershell32都运行了此命令-仍然会拒绝访问
  2. 我已经编辑了“本地安全策略”->“本地策略”->“用户权限分配”->在身份验证后模拟客户端-并添加了管理员帐户(我登录时使用的帐户)和“ locuser”帐户-仍然遭到拒绝访问
  3. 我还授予locuser管理员权限-仍然会拒绝访问

我很确定,PS Remoting方面有一些配置我遗失了,但无法弄清楚是什么-因为所有Powershell抛出的都是我Access Denied错误(请参见屏幕截图),几乎没有用处有关进一步排除故障的信息。

此外,检查事件日志中是否有任何跟踪,但无济于事。

PS远程处理错误

您已成为可怕的Double Hop的牺牲品。 基本上,您是从计算机A到计算机B进行身份验证,然后再次尝试从计算机B到计算机C进行身份验证(在本例中也恰好是B)。

如果可能的话,最好结束该会话并使用locuser凭据启动一个新会话,然后仅调用Start-Process。 另一种更混乱的方法是使用schtasks。

我可以告诉您如何在同一会话中执行此操作,但是它有点混乱且非常复杂,应该只能作为最后的选择:

在原始服务器(构建服务器)上:

  1. 运行命令Enable-WSManCredSSP -Role Client -Delegate [name] ,其中[name]是IP或DNS地址/范围,包括任何目标服务器(例如“ 192.168.1。*”)
  2. 打开GPEdit.msc,导航到“ Computer Configuration\\Administrative Templates\\System\\Credentials Delegation并检查是否Allow delegating fresh credentials了规则“ Allow delegating fresh credentialsAllow delegating fresh credentials with NTLM...并包括[name]

在目标服务器上:

  1. 运行命令Enable-WSManCredSSP -Role Server

运行命令:

Invoke-Command [targetserver] [-Credential $cred] -Scriptblock {
    ## do stuff

    Invoke-Command . -Credential $locusercred -Authentication Credssp -ScriptBlock {
        Start-Process -FilePath $sc #etc
    }
}

要注意的一些事情:

首先,我使用此设置创建了一个本地会话,然后从那里创建了一个远程会话(因此是AAB而不是ABB),因此组策略的内容可能放在错误的位置,但可以肯定它是正确的。

其次,我发现凭据很难在会话中工作(在本例中$locusercred )。 我确实将它本地化,但是很奇怪,它突然无法解密安全字符串。 我最终用注册表的定义密钥保存了安全字符串,因此可以始终从任何帐户对其进行解密,您可能需要在此处提出自己的解决方案。

免费的电子书“ PowerShell Remoting的秘密”中对所有这些内容进行了说明,如果您选择双跳方法,建议您阅读一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM