Powershell remoting - политика не позволяет делегировать учетные данные пользователя

Я новичок в powershell, и у меня возникли проблемы с делегированием учетных данных. У меня есть следующий скрипт:

$session = New-PSSession myserver -Authentication CredSSP -Credential DOMAINAdministrator
Invoke-Command -Session $session -ScriptBlock { <Some PowerShell Command> }

прежде чем запустить его, я сделал следующее:

  1. Run Enable-PSRemoting на myserver.
  2. Run Enable-WSManCredSSP Server на myserver.
  3. Run Restart-Service WinRM на myserver.
  4. Run Enable-WSManCredSSP Client –DelegateComputer myserver на клиенте.
  5. перезагрузил сервер и клиент.

но как только я запускаю сценарий, я получаю следующее сообщение об ошибке:

[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/*:

  1. расширения Local Computer Policy, затем Computer Configuration разверните Administrative Templates, затем System и нажмите кнопку Credential Delegation.
  2. на дважды щелкните Allow Delegating Fresh Credentials with NTLM-only Server Authentication.
  3. на окне выполните следующий:
  4. клик Enabled.
  5. на Options щелкните Show.
  6. в поле Значение введите 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