除非明确提供凭据,否则 powershell AD 模块无法通过 pssession 工作

除非明确提供凭据,否则 powershell AD 模块无法通过 pssession 工作

新的 2016 核心服务器出现问题。(最近从 2012r2 迁移了一台服务器)

在我们之前的 2012r2 服务器上,我可以通过远程 ps 会话 (enter-pssession oldservername) 运行 powershell 脚本。现在在新服务器上,我收到错误。

该脚本使用来自 AD 模块的命令(get-aduser、get-adgroup 等)。

通过远程会话运行时,会发生以下情况:

PS C:\> enter-pssession newserver
[newserver]: PS C:\> get-aduser username
Unable to contact the server. This may be because this server does not exist, 
it is currently down, or it does not have the Active Directory Web Services running.
+ CategoryInfo          : ResourceUnavailable: (username:ADUser) [Get-ADUser], ADServerDownException
+ FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADUser

然而,如果我指定为get-aduser username -Credential (Get-Credential),它就可以正常工作。

如果我直接在服务器上运行脚本(通过 rdp 连接),它可以正常工作。

Invoke-Command -Session $sess -ScriptBlock {get-aduser username}也失败了。

我假设这与 2016 年凭证传递方式的不同有关?有人遇到过这种情况吗?有办法解决吗?

答案1

您基本上遇到了经典的 Kerberos 双跳问题。您之前的 2012 R2 服务器可能已配置某种形式的 Kerberos 委派,而您的新服务器尚未配置。

这是一篇很棒的 Technet 博客文章,详细描述了与 PowerShell 相关的问题以及解决该问题的各种方法。

PowerShell 远程 Kerberos 双跳安全解决

相关内容