Powershell CREDSSP 问题
Posted
技术标签:
【中文标题】Powershell CREDSSP 问题【英文标题】:Powershell CREDSSP Problems 【发布时间】:2018-05-18 21:57:00 【问题描述】:我正在尝试在新服务器(服务器 C)上使用 CREDSSP
我已在另外两台服务器上成功设置 credssp。 (服务器 A 到服务器 B)
我现在尝试使用 CREDSSP 从服务器 A 连接到服务器 C,但无论我做什么,都会收到以下错误:
[SERVER_C.domain.edu] 连接到远程服务器 SERVER_C.domain.edu 失败,出现以下错误消息:访问被拒绝。有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。 + CategoryInfo : OpenError: (SERVER_C.domain.edu:String) [], PSRemotingTransportException + FullyQualifiedErrorId : AccessDenied,PSSessionStateBroken
这是我从服务器 A 到服务器 B 完美运行的查询:
# Setting the Credentials to be used to sign into the Server B.
$pass = ConvertTo-SecureString "Password" -asplaintext -force
$mycred = new-object -typename System.Management.Automation.PSCredential -argumentlist "domain\user.service",$pass
#
#
# The Remote Execution Command. Fully Qualified Domain name is critical since we are using Credssp.
# Credssp is being used to resolve an issue with a double hop authentication issue. Other steps setup on each computer had to be completed before Credssp would work
Invoke-Command -ComputerName SERVER_B.domain.edu -command C:\helloWorld.ps1 -Authentication Credssp -Credential $mycred
我已经仔细检查了服务器 C(新服务器)和服务器 B(旧服务器)之间我能想到的所有内容,但我找不到任何出现错误的原因。
我知道,如果我取出 CREDSSP 部分,则脚本可以正常工作,但涉及双跳的情况除外。所以服务器肯定是连接的。
我确保运行以下命令:
Enable-psremoting
Set-ExecutionPolicy -Scope localMachine -ExecutionPolicy RemoteSigned
Enable-WSManCredSSP -Role Client -DelegateComputer '*.reskit.org' –Force
Enable-WSManCredSSP -Role Server –Force
wsman
还遵循以下步骤:使用 gpedit.msc 并查看以下策略:计算机配置 -> 管理模板 -> 系统 -> 凭证委派 -> 允许委派新的凭证。验证它是否已启用并配置了适合目标计算机的 SPN。例如, 对于目标计算机名称“myserver.domain.com”,SPN 可以是以下之一:WSMAN/myserver.domain.com 或 WSMAN/*.domain.com。有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。
正如我所提到的,我知道服务器 A 设置正确,因为我将上面的脚本运行到服务器 B 没有问题。
任何建议都将不胜感激。
我唯一的想法是服务器 A 和 B 正在运行 Powershell 3,而服务器 C 正在运行 Powershell 5
【问题讨论】:
看起来问题与仅启用了 TLS 1.2 的服务器 B 相关,而启用了所有 TLS 版本的服务器 A 并且不幸地将 Powershell 会话设置为使用 TLS 1.2 似乎无法解决问题。我开了一个新问题来专门解决这个问题:***.com/questions/50513033/… 【参考方案1】:我注意到 Enable-WSManCredSSP -Role Client 命令使用 *.reskit.org 而不是 *.domain.eu.(?)
对我来说,在服务器或客户端运行哪些命令并不完全清楚,但乍一看还可以。我最近配置了credssp也是为了解决双跳问题,如下:
在服务器上:
Enable-WSManCredSSP -Role Server -Force
Get-WSManCredSSP 显示:计算机未配置为允许委派新凭据。此计算机配置为从远程客户端计算机接收凭据。
在客户端:
winrm quickconfig
Enable-WSManCredSSP -role client *.mydomain.com
Get-WSMancredSSP 显示: 该机器配置为允许将新凭据委派给以下目标:wsman/*.mydomain.com。此计算机未配置为从远程客户端计算机接收凭据。
我的客户端脚本通过以下方式启动显式远程会话:
$session = New-PSSession -Computer $computerName -Credential $credential -Authentication Credssp
【讨论】:
以上是关于Powershell CREDSSP 问题的主要内容,如果未能解决你的问题,请参考以下文章
PowerShell Web 访问身份验证类型设置为 CredSSP 的问题
powershell 来自https://stackoverflow.com/questions/1862554/get-childitem-recurse-as-a-parameter-in-pow