Powershell remoting - политика не позволяет делегировать учетные данные пользователя
Я новичок в powershell, и у меня возникли проблемы с делегированием учетных данных. У меня есть следующий скрипт:
$session = New-PSSession myserver -Authentication CredSSP -Credential DOMAINAdministrator
Invoke-Command -Session $session -ScriptBlock { <Some PowerShell Command> }
прежде чем запустить его, я сделал следующее:
- Run
Enable-PSRemoting
на myserver. - Run
Enable-WSManCredSSP Server
на myserver. - Run
Restart-Service WinRM
на myserver. - Run
Enable-WSManCredSSP Client –DelegateComputer myserver
на клиенте. - перезагрузил сервер и клиент.
но как только я запускаю сценарий, я получаю следующее сообщение об ошибке:
[myserver] Connecting to remote server failed with the following error message : The WinRM client cannot process the request. A computer policy does not allow the delegation of
the user credentials to the target computer. Use gpedit.msc and look at the following policy: Computer Configuration -> Administrative Templates -> System -> Credentials Delega
tion -> Allow Delegating Fresh Credentials. Verify that it is enabled and configured with an SPN appropriate for the target computer. For example, for a target computer name "m
yserver.domain.com", the SPN can be one of the following: WSMAN/myserver.domain.com or WSMAN/*.domain.com. For more information, see the about_Remote_Troubleshooting Help topic.
+ CategoryInfo : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [], PSRemotingTransportException
+ FullyQualifiedErrorId : PSSessionOpenFailed
Я проверил политики, как указано в сообщении об ошибке, но все, кажется, в порядке. Что еще может блокировать меня?
4 ответов
мне пришлось сделать на сервере следующее:
Enable-WSManCredSSP -Role Server
Я должен был сделать следующее на клиенте:
set-item wsman:localhost\client\trustedhosts -value *
Enable-WSManCredSSP -Role Client –DelegateComputer *
использовать gpedit.msc
на клиенте, чтобы включить делегирование свежих учетных данных WSMAN/*:
- расширения
Local Computer Policy
, затемComputer Configuration
развернитеAdministrative Templates
, затемSystem
и нажмите кнопкуCredential Delegation
. - на дважды щелкните
Allow Delegating Fresh Credentials with NTLM-only Server Authentication
. - на окне выполните следующий:
- клик
Enabled
. - на
Options
щелкнитеShow
. - в поле Значение введите
WSMAN/*
и нажмите кнопкуOK
. Убедитесь, чтоConcatenate OS defaults with input above
, а затем нажмитеOK
.
теперь работает следующая команда (после запроса пароля):
Invoke-Command { dir \fileserver\devtools } -computer appserver01 -authentication credssp -credential domain\user
посмотреть форумы MSDN.
посмотреть TechNet
Я, наконец, получил его на работу, спасибо на этой странице. Он предоставляет сценарий, который задает необходимые политики делегирования учетных данных путем установки соответствующих разделов реестра непосредственно. Как только я запустил этот скрипт с правами администратора, я смог успешно установить соединение CredSSP с myserver:
Enable-WSManCredSSP -Role client -DelegateComputer *.mydomain.com
$allowed = @('WSMAN/*.mydomain.com')
$key = 'hklm:\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation'
if (!(Test-Path $key)) {
md $key
}
New-ItemProperty -Path $key -Name AllowFreshCredentials -Value 1 -PropertyType Dword -Force
$key = Join-Path $key 'AllowFreshCredentials'
if (!(Test-Path $key)) {
md $key
}
$i = 1
$allowed |% {
# Script does not take into account existing entries in this key
New-ItemProperty -Path $key -Name $i -Value $_ -PropertyType String -Force
$i++
}
расширение ответа Акиры выше, в gpedit.msc я должен был установить "разрешить делегирование свежих учетных данных с аутентификацией сервера только NTLM", а не"разрешить делегирование свежих учетных данных".
мне пришлось полностью автоматизировать мое решение, особенно раздел части в решении, в котором вы заходите в Редактор GPO.
1) включить Удаленный PS
Enable-PSRemoting -force
2) Включить CredSSP
Enable-WSManCredSSP -Role Server -Force
Enable-WSManCredSSP -Role Client -DelegateComputer locahost -Force
Enable-WSManCredSSP -Role Client -DelegateComputer $env:COMPUTERNAME -Force
Enable-WSManCredSSP -Role Client -DelegateComputer $domain -Force
Enable-WSManCredSSP -Role Client -DelegateComputer "*.$domain" -Force
Set-Item -Path "wsman:\localhost\service\auth\credSSP" -Value $True -Force
3) включить свежие учетные данные NTLM через Registery:
New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation -Name AllowFreshCredentialsWhenNTLMOnly -Force
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation\AllowFreshCredentialsWhenNTLMOnly -Name 1 -Value * -PropertyType String
только после этого я смог запустить сценарий powershell в качестве локального администратора, который мог работать в PSSession и preform AD actions.
$secpasswd = ConvertTo-SecureString $adPassword -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ("$domain\Admin", $secpasswd)
$adminSession = New-PSSession -Credential $credential -Authentication Credssp;
$sb = {
param($p1, $p2)
whoami
New-ADUser ....
}
Invoke-Command -Session $adminSession -Script $sb -ArgumentList $domain,$userPassword