1

我有一个 C# 进程,作为其角色的一部分,它从一组 Windows Server 2008R2 机器中读取性能计数器。所有机器都在一个公司的 AD 域中并且在同一个网络上。如果我登录到服务器计算机并从我的登录会话中运行 C# 进程,该程序可以正常工作。我现在正在尝试使用带有 powershell 的这个 C# 进程来自动化一些实验。目标是在其中一台服务器上从我的桌面远程启动它。所有机器都在同一个域中(桌面和服务器)。

所有机器都设置了:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Configure-SMRemoting.ps1 -force -enable

powershell 脚本正在创建一个 PsSession 以连接到运行 C# 进程并使用 invoke-command 启动它的机器。但是,远程主机上的 C# 应用程序无法再访问它监视的设置机器上的性能计数器:-“访问被拒绝”。

怀疑这是一个多跳认证问题,我按照这些说明http://www.ravichaganti.com/blog/?p=1230启用多跳认证。尝试使用 CredSSP:

$cred = Get-Credential -Credential "Company\user"
$session = new-pssession -ComputerName $loadHost -Credential $cred -Authentication CredSSP -ErrorAction Stop

产量:

连接到远程服务器失败并显示以下错误消息:WinRM 客户端无法处理请求。CredSSP 身份验证当前在客户端配置中被禁用。更改客户端配置并再次尝试请求。还必须在服务器配置中启用 CredSSP 身份验证。此外,必须编辑组策略以允许将凭据委派给目标计算机。使用 gpedit.msc 并查看以下策略:计算机配置 -> 管理模板 -> 系统 -> 凭证委派 -> 允许委派新凭证。验证它是否已启用并使用适合目标计算机的 SPN 进行配置。例如,对于目标计算机名称“myserver.domain.com”,SPN 可以是以下之一:WSMAN/myserver.domain.com 或 WSMAN/*。

使用 gpedit.msc,它是简单的 Allow Delegating Fresh Credentials 设置与域的相应 SPN 条目。所有计算机上的防火墙都配置为启用 WinRM Http-In。我已阅读 about_Remote_Troubleshooting 文档无济于事。

关于多跳身份验证是否确实是正确方法的任何想法,或者其他任何可能破坏这一点的想法?

4

1 回答 1

1

我写了那篇博文。而且,是的,从问题的描述来看,它看起来像是一个 CredSSP 身份验证问题。首先,您需要正确的权限来监控性能计数器。当使用远程处理时,如果凭据被委派,则第二个接收请求为 SYSTEM,因此远程系统上的 Invoke-COMmand 产生拒绝访问。

第一个问题是:为什么不在远程系统上使用 Enable-PSremoting?第二个问题是:您是否将运行 C# 应用程序的本地系统配置为 CredSSP 客户端。

Enable-WSManCredSSP -Role Client -DelegateComputer "*.SP2010lab.com"

这只需要在您用作客户端的计算机上完成。在您使用 Invoke-Command 的系统上,您必须设置 CredSSP 服务器。

Enable-WSManCredSSP -Role Server

你能证实这一点吗?

于 2012-05-27T11:20:09.357 回答