求助:2016 Core服务器远程PSSession中AD模块需显式凭据才能运行
我之前处理过类似的服务器迁移问题,结合你的描述,这大概率是PowerShell远程双跳身份验证的问题——简单来说,就是你从本地远程连接到2016 Core服务器后,你的身份凭据没办法自动传递到AD域控制器(也就是“第二跳”),而2012R2的默认配置可能宽松一些,允许了这种隐式的身份传递。下面给你拆解根源和可行的解决办法:
问题根源
当你通过Enter-PSSession连接到新服务器时,你的本地凭据只会被用来验证你和新服务器之间的会话,但默认不会被传递给AD服务器。这是微软为了安全设计的限制,2016 Core的安全策略比2012R2更严格,所以这个问题就显现出来了。而显式指定凭据相当于直接用那个账号去访问AD,绕开了身份传递的环节,所以能正常运行。
解决方案
1. 配置Kerberos约束委派(推荐长期方案)
这是最规范、最安全的解决方式,让你的2016 Core服务器被允许向AD服务委派身份:
- 打开Active Directory用户和计算机控制台,找到你的2016 Core服务器对象
- 右键点击服务器→属性→切换到委派标签页
- 选择「信任此计算机以委派到指定服务」,然后点击添加按钮
- 在弹出的窗口中点击「用户或计算机」,输入你的域控制器名称并确认
- 在“可用服务”列表里找到
ldap和kerberos这两个服务(AD的核心服务),添加进去 - 保存配置后,要么重启2016 Core服务器,要么等待AD复制生效(一般15-30分钟)
之后再远程连接执行Get-ADUser这类命令,就不需要显式指定凭据了。
2. 用CredSSP身份验证(临时/测试方案)
如果只是临时需要解决问题,或者不想动AD配置,可以用CredSSP允许身份传递(注意:这个方式会把凭据缓存到远程服务器,安全性略低,不建议长期用):
- 在你发起远程会话的本地机器上运行:
Enable-WSManCredSSP -Role Client -DelegateComputer "newservername" - 在2016 Core服务器上运行:
Enable-WSManCredSSP -Role Server - 之后用CredSSP身份验证发起远程会话:
Enter-PSSession newservername -Authentication CredSSP -Credential (Get-Credential)
这样在会话里执行AD模块命令时,你的凭据会被传递到AD服务器,就能正常运行了。
3. 导入本地凭据到远程会话(临时应急方案)
如果上面两种方式都暂时没法操作,还可以手动把你的凭据导入到远程会话里:
- 本地先导出凭据(注意:这个XML文件包含明文加密的凭据,用完一定要删除):
$cred = Get-Credential $cred | Export-Clixml -Path "C:\temp\my_ad_cred.xml" - 把这个XML文件复制到2016 Core服务器的某个目录下,然后在远程会话里导入:
$cred = Import-Clixml -Path "D:\temp\my_ad_cred.xml" # 可以把凭据设为AD模块的默认凭据 Set-ADServerSettings -Credentials $cred
之后执行AD命令就会默认用这个凭据,不需要每次都指定。
验证配置
配置完成后,远程连接到2016 Core服务器,执行Get-ADUser <你的域用户名>,如果不需要加-Credential参数就能返回用户信息,说明配置生效了。
内容的提问来源于stack exchange,提问作者Chris Wall
相关产品推荐
相关产品推荐

