web-dev-qa-db-fra.com

Télécommande Powershell - La stratégie n'autorise pas la délégation des informations d'identification de l'utilisateur

Je suis nouveau sur PowerShell et j'ai du mal à utiliser la délégation des informations d'identification. J'ai le script suivant:

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

Avant de l'exécuter, j'ai fait ce qui suit:

  1. Courir Enable-PSRemoting sur myserver.
  2. Courir Enable-WSManCredSSP Server sur myserver.
  3. Courir Restart-Service WinRM sur myserver.
  4. Courir Enable-WSManCredSSP Client –DelegateComputer myserver sur le client.
  5. Redémarrage du serveur et du client.

Mais une fois que j'ai exécuté le script, j'obtiens le message d'erreur suivant:

[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

J'ai vérifié les politiques comme mentionné dans le message d'erreur mais tout semble aller bien. Quoi d'autre pourrait me bloquer?

23
ChrisB

Je l'ai finalement fait fonctionner grâce à cette page . Il fournit un script qui définit les stratégies de délégation des informations d'identification requises en définissant directement les clés de registre appropriées. Une fois que j'ai exécuté ce script avec des privilèges d'administrateur, j'ai réussi à établir une connexion 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++
}
12
ChrisB

J'ai dû faire ce qui suit sur le serveur:

Enable-WSManCredSSP -Role Server

J'ai dû faire ce qui suit sur le client:

set-item wsman:localhost\client\trustedhosts -value *

Enable-WSManCredSSP -Role Client –DelegateComputer *

Utilisation gpedit.msc sur le client pour activer la délégation de nouvelles informations d'identification à WSMAN/*:

  1. Développer Local Computer Policy, développer Computer Configuration, développer Administrative Templates, développez System, puis cliquez sur Credential Delegation.
  2. Dans le volet Settings, double-cliquez sur Allow Delegating Fresh Credentials with NTLM-only Server Authentication.
  3. Dans le Allow Delegating Fresh Credentials with NTLM-only Server Authentication boîte de dialogue, procédez comme suit:
  4. Cliquez sur Enabled.
  5. Dans la zone Options, cliquez sur Show.
  6. Dans Valeur, saisissez WSMAN/*, puis cliquez sur OK. Sois sûr que Concatenate OS defaults with input above est sélectionné, puis cliquez sur OK.

La commande suivante fonctionne maintenant (après une invite de mot de passe):

Invoke-Command { dir \\fileserver\devtools } -computer appserver01 -authentication credssp -credential domain\user

Voir forums MSDN .

Voir TechNet

22
Akira Yamamoto

En développant la réponse d'Akira ci-dessus, dans gpedit.msc, j'ai dû définir "Autoriser la délégation de nouvelles informations d'identification avec l'authentification de serveur NTLM uniquement" plutôt que "Autoriser la délégation de nouvelles informations d'identification".

5
Badajoz95

J'ai eu le besoin d'automatiser entièrement ma solution, en particulier la section de la partie de la solution qui vous fait entrer dans l'éditeur GPO.

1) Activer PS à distance

Enable-PSRemoting -force

2) Activer 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) Activez les informations d'identification NTLM via le registre:

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

Ce n'est qu'après cela que j'ai pu lancer le script PowerShell en tant qu'administrateur local qui a pu s'exécuter dans une session PSSession et effectuer des actions AD.

$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
3
Chris