我有以下环境配置:
"目标"我的Windows服务在" NT AUTHORITY \ SYSTEM"下运行的机器。此Windows服务具有.NET Remoting安全IPC端口,如下所示:
Dictionary<string, object> properties = new Dictionary<string, object>();
properties["authorizedGroup"] = GetUsersGroupName(); // "S-1-5-32-545" SID, setting to "S-1-1-0" gives the same result
properties["name"] = configuration.ServiceShortName + ".Server";
properties["portName"] = configuration.ServiceGuid;
BinaryServerFormatterSinkProvider sinkProvider = new BinaryServerFormatterSinkProvider();
sinkProvider.TypeFilterLevel = TypeFilterLevel.Full;
Channel = new IpcServerChannel(properties, sinkProvider);
Channel.IsSecured = true;
ChannelServices.RegisterChannel(Channel, true);
&#34;来电&#34;机器,来自域认证帐户(DOMAIN \ Caller)远程调用本地(本地&#34; Target&#34;)应用程序(让它命名为TargetApp)& #34;目标&#34;机器通过Powershell Remoting(WS-Management):
$session = new-pssession -computerName "$targetHost"
Invoke-Command -Session $session -Args $application,$arguments -OutVariable output -scriptblock $scriptBlockRemote
Remove-PSSession $session
在&#34; Target&#34;上本地调用的TargetApp机器(由于来自&#34;来电者&#34;的powershell远程呼叫)必须在相同的&#34;目标&#34;上对IPC服务器进行IPC客户端呼叫。机器(IPC服务器在同一台目标机器上的Windows服务下运行)
在此配置中调用IPC服务器的任何尝试最终都会:
无法连接到IPC端口:访问被拒绝。
观察:
当&#34;来电&#34;在&#34; Target&#34;上调用TargetApp机器我可以清楚地看到:
基本上我可以清楚地看到powershell确实在&#34; Target&#34;上调用了本地TargetApp。在预期凭证下的机器,但由于某种原因IPC调用失败(尽管两个进程 - 执行IPC客户端调用的TargetApp和容纳IPC服务器的Windows服务 - 在同一台机器上,IPC调用失败)
神奇!如果我去&#34;目标&#34;机器直接运行&#34; cmd&#34;在DOMAIN \ Caller帐户凭据下以这种方式调用TargetApp - IPC调用成功!
我试图找到解决方案,过去似乎有几个人碰到了这个问题,但没有明确的理由/原因/解决方案。
P.S。经过一番研究后,我怀疑这是与身份验证相关的,因为Powershell Remoting默认使用Kerberos,而IPC频道只适用于NTLM: https://msdn.microsoft.com/en-us/library/azure/ms172351(v=vs.85).aspx
IPC频道始终使用NTLM身份验证。不支持Kerberos,因为IPC仅限于单台计算机内的呼叫。
答案 0 :(得分:0)
所以,我的调查结果如下:
所描述方案的潜在解决方案是使用Windows任务计划程序远程安排任务执行。