远程 Powershell 不起作用,但 test-wsman 起作用

远程 Powershell 不起作用,但 test-wsman 起作用

我需要编写一些例行任务脚本,从服务器A远程执行到许多主机,但其中有几个无法执行该脚本。

如果我执行这个:

$cred = Get-Credential myUser
Invoke-Command -ComputerName serverB -ScriptBlock{gci d:\} -Credential $cred

或这个:

Test-WSMan -ComputerName ServerB -Credential $cred -Authentication Negotiate

我收到以下错误

[SeverB] 连接到远程服务器 ServerB 失败,并显示以下错误消息:WinRM 无法处理请求。使用协商身份验证时发生以下错误,错误代码为 0x80090322:发生未知的安全错误。可能的原因包括:-指定的用户名或密码无效。-未指定身份验证方法和用户名时使用 Kerberos。-Kerberos 接受域用户名,但不接受本地用户名。-远程计算机名称和端口的服务主体名称 (SPN) 不存在。-客户端和远程计算机位于不同的域中,并且两个域之间没有信任。检查上述问题后,请尝试以下操作:-检查事件查看器中与身份验证相关的事件。-更改身份验证方法;将目标计算机添加到 WinRM TrustedHosts 配置设置或使用 HTTPS 传输。请注意,TrustedHosts 列表中的计算机可能未经过身份验证。-有关 WinRM 配置的更多信息,请运行以下命令:winrm help config。有关更多信息,请参阅 about_Remote_Troubleshooting 帮助主题。+ CategoryInfo : OpenError: (serverB:String) [], PSRemotingTransportException + FullyQualifiedErrorId : -2144108387,PSSessionStateBroken

但是当我单独使用 test-wsman 时:

Test-WSMan -ComputerName ServerB

wsmid : 
http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd
ProtocolVersion : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
ProductVendor   : Microsoft Corporation
ProductVersion  : OS: 0.0.0 SP: 0.0 Stack: 3.0

我不知道问题出在哪里。我已经尝试使用启用 psremote微软,检查防火墙设置和用户权限

答案1

似乎是现有 spn 映射问题,在 powershell 中您可以删除 spn 帐户并重试。

setspn -D HTTP/SERVERNAME <domain account>
setspn -D HTTP/SERVERNAME.DOMAINAME.COM <domain account>

如果问题仍然存在,您可以检查使用 IP 地址(IPv4)而不是服务器名称来绕过 Kerberos 错误。

来源 https://serverfault.com/questions/580411/windows-server-manager-kerberos-error-0x80090322

https://social.technet.microsoft.com/Forums/windows/en-US/a4c5c787-ea65-4150-8d16-2a19c569a589/enterpssession-winrm-cannot-process-the-request-kerberos-authentication-error-0x80090322?forum=winserverpowershell

答案2

我解决了我的问题。Kerberos 身份验证、远程 Powershell 和集成服务之间存在已知问题(服务器正在运行该应用程序)。信息可以找到这里这里

我必须为服务器(serverB_alias)创建一个 A 记录 DNS,并将该服务器的 HTTP spn 设置为指定 wsman 尝试连接的端口(5985)的帐户。

setspn -s http/serverB domain\user
setspn -s http/serverB.domain domain\user
setspn -s http/serverB_alias:5985 domain\user
setspn -s http/serverB_alias.domain:5985 domain\user

最后,我使用以下命令将别名 DNS 添加到服务器 A 受信任的主机列表中:

$curValue = (get-item wsman:\localhost\Client\TrustedHosts).value
set-item wsman:\localhost\Client\TrustedHosts -value "$curValue, serverB_alias"

答案3

我在 VMWare 上遇到了这个问题并按照以下步骤修复了它

我从 Active Directory 用户和计算机中删除了 ServerA 和 ServerB。

然后我将 ServerA 和 ServerB 的网络 ID 从域更改为工作组

然后我重新启动了 ServerA 和 ServerB,并将它们移回域

Enable-PSRemoting -force然后,如果 ServerA 和 ServerB WinRM service均未运行,我将在它们上运行。

相关内容