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:
Enable-PSRemoting
sur myserver.Enable-WSManCredSSP Server
sur myserver.Restart-Service WinRM
sur myserver.Enable-WSManCredSSP Client –DelegateComputer myserver
sur le 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?
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++
}
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/*:
Local Computer Policy
, développer Computer Configuration
, développer Administrative Templates
, développez System
, puis cliquez sur Credential Delegation
.Settings
, double-cliquez sur Allow Delegating Fresh Credentials with NTLM-only Server Authentication
.Allow Delegating Fresh Credentials with NTLM-only Server Authentication
boîte de dialogue, procédez comme suit:Enabled
.Options
, cliquez sur Show
.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
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".
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