PowerShell में काम करने के लिए CredSSP प्रमाणीकरण प्राप्त नहीं कर सकता


10

रीमोटिंग का उपयोग करके एक पावरशेल स्क्रिप्ट बनाने के प्रयास में मैं जो मैं मानता हूं वह डबल-हॉप समस्या है । उस लेख में, पेरिमन समस्या का एक संक्षिप्त विवरण और साथ ही इस मुद्दे को हल करने के लिए विशिष्ट कदमों (लगभग तुच्छ अगर आप आज्ञाओं को जानते हैं, लेकिन अपने जैसे किसी परिचित के लिए, वह जानकारी अमूल्य थी!)।

मैं Enable-WSManCredSSP Serverबिना किसी घटना के अपने Win7 सर्वर Enable-WSManCredSSP Client –DelegateComputer <FQDN of the server>पर चला, लेकिन अपने Win7 क्लाइंट पर चलने का प्रयास करने से यह त्रुटि उत्पन्न हुई:

Enable-WSManCredSSP : The client cannot connect to the destination specified
in the request. Verify that the service on the destination is running and
is accepting requests.
Consult the logs and documentation for the WS-Management service running
on the destination, most commonly IIS or WinRM. If the destination
is the WinRM service, run the following com mand on the destination
to analyze and configure the WinRM service: "winrm quickconfig".

रनिंग winrm quickconfig की पुष्टि की अपने सर्वर WinRM चल रहा था:

WinRM already is set up to receive requests on this machine.
WinRM already is set up for remote management on this machine.

और Get-WSManCredSSP ने पुष्टि की कि मेरा सर्वर क्लाइंट से साख स्वीकार करने के लिए तैयार है:

The machine is not configured to allow delegating fresh credentials.
This computer is configured to receive credentials from a remote client computer.

मैंने WinRM पर Boessen का लेख भी पाया जिसमें उन्होंने सामान्य WinRM सेटअप का वर्णन किया और निदान में उपयोगी डेटा बिंदु प्राप्त करने के लिए एक tidbit पाया; क्लाइंट पर चलाया गया यह कमांड सर्वर को दूरस्थ रूप से एक्सेस करने के लिए विजेता टूल का उपयोग करता है:

winrs -r:http://<FQDN of my server>:5985 -u:<myDomain>\msorens "dir c:\"

उस आदेश ने अपेक्षित परिणाम लौटाया, सर्वर पर रूट निर्देशिका की सामग्री, घटना के बिना, यह पुष्टि करते हुए कि मेरा FQDN सही है और WinRM सक्षम है।

Boessen इंगित करता है कि पोर्ट 5985 Win7 के लिए डिफ़ॉल्ट है; सर्वर पर चलाया गया यह कमांड 5985 के मान की पुष्टि करता है:

get-item wsman:\localhost\listener\listener*\port

प्रश्न: मैं क्लाइंट साइड पर Enable-WSManCredSSP कमांड निष्पादित करने में असमर्थ क्यों हूं?


2011.06.07 अद्यतन

मैं ऊपर सवाल का समाधान मिल गया: लागू सक्षम-PSRemoting , एक कंप्यूटर कॉन्फ़िगर करने के लिए करने के लिए विज्ञापित प्राप्त दूरस्थ आदेश की अनुमति सक्षम-WSManCredSSP सफलतापूर्वक काम करने के लिए ग्राहक पर! जिज्ञासु, लेकिन इसका मैन पेज इंगित करता है कि यह कई अलग-अलग कार्यों को करता है, इसलिए मुझे लगता है कि अनजाने में उन लोगों में से एक था जो मुझे ज़रूरत थी।

लेकिन तब मैं एक और सड़क पर पहुंच गया जब मैंने क्रेडएसएसपी प्रमाणीकरण का उपयोग करने का प्रयास किया। यहाँ आदेश है:

Invoke-Command { Write-Host "hello, world" } -computername $serverName `
-credential $testCred  -Authentication Credssp

और यहाँ प्रतिक्रिया है:

दूरस्थ सर्वर से कनेक्ट करना निम्न त्रुटि संदेश के साथ विफल हुआ:
WinRM क्लाइंट अनुरोध को संसाधित नहीं कर सकता है। एक कंप्यूटर नीति अनुमति नहीं देती है
लक्ष्य कंप्यूटर के लिए उपयोगकर्ता क्रेडेंशियल्स का प्रतिनिधिमंडल। Gpedit.msc का प्रयोग करें
और निम्न नीति को देखें: कंप्यूटर कॉन्फ़िगरेशन
-> प्रशासनिक टेम्पलेट -> सिस्टम -> क्रेडेंशियल प्रतिनिधि
-> प्रतिनिधि को नए क्रेडेंशियल की अनुमति दें। सत्यापित करें कि यह सक्षम है और
लक्ष्य कंप्यूटर के लिए उपयुक्त SPN के साथ कॉन्फ़िगर किया गया। उदाहरण के लिए,
एक लक्ष्य कंप्यूटर नाम "myserver.domain.com" के लिए, SPN एक हो सकता है
निम्नलिखित: WSMAN /myserver.domain.com या WSMAN / *। domain.com
अधिक जानकारी के लिए, about_Remote_Troublesourcing सहायता विषय देखें।

मैंने इस उल्लेखनीय सहायक त्रुटि संदेश के रूप में सेटिंग्स को सत्यापित किया, और यह मुझे ठीक से कॉन्फ़िगर किया गया है, ऐसा लगता है।

नया सवाल: क्रेडेंशपी के साथ यह रिमोट कनेक्शन का प्रयास विफल क्या है?


जवाब देने में कृपया निम्नलिखित बातों को ध्यान में रखें: मुझे पहले से कोई धारणा है कि मैं जानता हूँ कि मैं यहाँ क्या कर रहा हूँ, इसके विपरीत किसी भी उपस्थिति के बावजूद दिखाई देता है। :-) विंडोज एडमिन मेरी विशेषज्ञता का क्षेत्र नहीं है!


फिर भी इसे बदलने की खातिर एमएस बदलती चीजों का एक और पागलपन भरा उदाहरण !! मुझे लाइव माइग्रेशन या इस तरह की किसी भी चीज़ में कोई दिलचस्पी नहीं है, मैं सिर्फ 3 हाइपर-वी 2012 सर्वरों में लॉग इन करने में सक्षम होना चाहता हूं जो मेरे पास हैं और उन पर VM को रीमूट करना / स्टार्ट / स्टॉप / रिबूट करना / हटाना, यह पूरी तरह से काम करता है। मेरा WIn7 डेस्कटॉप, अब मैं 10 जीत रहा हूं और मुझे कुछ ऐसा करने के लिए बाएं और केंद्र से कूदना होगा जो पहले करना आसान था, विंडोज़ 10 वर्तमान में मुझे खूनी पागल बना रहा है: - /
shawty

जवाबों:


8

मैं एक संक्षिप्त अंतराल के बाद फिर से नई आँखों (मेरी और एक सहकर्मी दोनों) के साथ फिर से देखने के लिए इस पर वापस आया और फिर से मूल बातें पर वापस जाने का फैसला किया:

मेरे द्वारा निष्पादित ग्राहक पर (व्यवस्थापक शेल में):

enable-wsmancredssp -role client -delegatecomputer devremvm03 -force

सर्वर पर मैं निष्पादित (व्यवस्थापक शेल में):

enable-wsmancredssp -role server -force

दोनों ने सामान्य उत्पादन का संकेत दिया जो यह दर्शाता है कि क्रेडएसएसपी अब "सच" था।

मैंने तब जटिलता के बढ़ते स्तरों के माध्यम से चलने के लिए निम्नलिखित अभ्यासकर्ता कोड का उपयोग किया:

$block = {
  Write-Host ("hello, world: {0}, {1}" -f $env:USERNAME, (hostname))
}
$username = "test_user"
$password = "..."   
$adjPwd = $password | ConvertTo-SecureString -asPlainText -Force
$testCred = (New-Object System.Management.Automation.PSCredential($username,$adjPwd))    

switch ($choice)
{
  "basic"       { Invoke-Command $block }
  "remote"      { Invoke-Command $block -computername $serverName }
  "credentialA" { Invoke-Command $block -computername $serverName -credential $testCred  }
  "credentialB" { Invoke-Command $block -computername $serverName -credential $testCred  -Authentication Credssp}
  "session"     { 
      $testSession = New-PSSession -computername $serverName -credential $testCred -Authentication Credssp
      if ($testSession) { Invoke-Command $block -Session $testSession; Remove-PSSession $testSession }
      }
}

यह सब मेरी run.ps1 स्क्रिप्ट में है, इसलिए प्रतिलेख निम्नानुसार है (और यह एक गैर- अप्रत्यक्ष शेल में चला गया ):

PS C:\> .\run.ps1 basic
hello, world: msorens, MyLocalMachine
PS C:\> .\run.ps1 remote MyRemoteServer
hello, world: msorens, MyRemoteServer
PS C:\> .\run.ps1 credentialA MyRemoteServer
hello, world: test_user, MyRemoteServer
PS C:\> .\run.ps1 credentialB MyRemoteServer
hello, world: test_user, MyRemoteServer
PS C:\> .\run.ps1 session MyRemoteServer
hello, world: test_user, MyRemoteServer

पहले, केवल बेसिक, रिमोट और क्रेडेंशियल ने काम किया था। अब सभी 5 काम करते हैं। वाह!


CredSSP अच्छा समाधान है? Microsoft कहता है: सावधानी: क्रेडेंशियल सिक्योरिटी सर्विस प्रोवाइडर (क्रेडएसएसपी) प्रमाणीकरण, जिसमें उपयोगकर्ता के क्रेडेंशियल्स को किसी दूरस्थ कंप्यूटर को प्रमाणित करने के लिए पास किया जाता है, को ऐसे कमांडों के लिए डिज़ाइन किया गया है, जिन्हें एक से अधिक संसाधनों पर प्रमाणीकरण की आवश्यकता होती है, जैसे कि रिमोट नेटवर्क शेयर तक पहुँच प्राप्त करना। यह तंत्र रिमोट ऑपरेशन के सुरक्षा जोखिम को बढ़ाता है। यदि दूरस्थ कंप्यूटर से छेड़छाड़ की जाती है, तो इसके लिए पारित किए गए क्रेडेंशियल्स का उपयोग नेटवर्क सत्र को नियंत्रित करने के लिए किया जा सकता है।
कीनिकात

2

जब मुझे ऐसा करना था, तो मैंने इसे काम करने के लिए किया था (कुछ जीपीओ सेटिंग्स भी हो सकती हैं, लेकिन ऐसा लगता है कि आपने उन्हें कवर कर लिया है)।

डोमेन में किसी भी मशीन से कनेक्ट करने के लिए क्रेडाई का उपयोग करने के लिए ग्राहक को सक्षम करने के लिए:

Enable-WSManCredSSP -Role Client -DelegateComputer "*.my.domain.com" -Force | out-null
#the following is used because -delegatecomputer (above) doesn't appear to actually work properly.
Set-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\Credssp\PolicyDefaults\AllowFreshCredentialsDomain -Name WSMan -Value "WSMAN/*.my.domain.com"

तब मैंने प्रत्येक टारगेट मशीन (सर्वर) पर निम्नलिखित क्रेडेंशियल प्रमाणीकरण सक्षम करने के लिए दौड़ लगाई:

Connect-WSMan -ComputerName $computer 
Set-Item "WSMAN:\$computer\service\auth\credssp" -Value $true 

इस पाठ्यक्रम के लिए आवश्यक है कि आप स्क्रिप्ट को उपयुक्त अनुमतियों के साथ चला रहे हों। यह मेरे लिए काम किया - मुझे आशा है कि यह आपकी मदद करेगा।


सुझाव के लिए धन्यवाद, लेकिन यह अभी भी उसी परिणाम के साथ विफल रहा।
माइकल सोरेंस 19

मुझे यकीन नहीं है कि इससे कोई फर्क पड़ता है, लेकिन मेरी मूल पोस्ट भ्रामक हो सकती है। मैंने इन सभी कमांडों को CLIENT मशीन से चलाया । इसलिए ऊपर दिए गए दूसरे कोड ब्लॉक में "$ कंप्यूटर" उस सर्वर का नाम था जिसे मैं TO से कनेक्ट करने का प्रयास कर रहा था ।
18

मुझे कुछ समझ में आया क्योंकि यह समझ में नहीं आया कि सर्वर को ग्राहकों का प्राथमिक ज्ञान होना चाहिए था। मैं फिर से पूरे अनुक्रम को फिर से सुनिश्चित करता हूं, हालांकि, और यह एक ही त्रुटि के साथ विफल होता है। एक अन्य भिन्नता: मैंने -अनुशासन के पैरामीटर को छोड़ दिया और पुष्टि की कि मेरे कथन में सब कुछ काम करता है ( Invoke-Command { Write-Host "hello, world" } -computername $serverName -credential $testCred)। तो क्रेडएसएसपी प्रमाणीकरण सख्ती से मुद्दा है।
माइकल सोरेंस

सहमत - बुनियादी WinRM ठीक है; मुझे पता नहीं है कि सटीक मुद्दा क्या है, लेकिन मुझे संदेह है कि यह 'नए क्रेडेंशियल्स की अनुमति देने' की नीति और आपके द्वारा स्थापित SPN से संबंधित है। मैं उस पॉलिसी सेटिंग पर करीब से नज़र डालूंगा और शायद यह जानने के लिए कि केरोसोस सही काम कर रहा है, थोड़ी गहराई में खुदाई करें। यह लिंक ऐसा लगता है कि यह सहायक हो सकता है: [लिंक] msdn.microsoft.com/en-us/library/ee309365(v=vs.85).aspx
jbsmith

कनेक्ट-WSMan सर्वर का उपयोग क्यों करें, बेहतर-सक्षम- wsmancredssp -role सर्वर का उपयोग करें, है ना?
किनिकेत

1

मुझे वह स्थान मिला जहां मैं एक हाइपर-वी 2012R2 सर्वर से दूसरे में वीएम को माइग्रेट कर सकता था, लेकिन इसे वापस माइग्रेट नहीं कर सका। (मैं अपने डोमेन नियंत्रक के रूप में एसएएमबीए 4.2 का उपयोग करने की कोशिश कर रहा हूं और यह देखना चाहता हूं कि क्या मैं क्रेडएसएसपी के साथ प्रवास कर सकता हूं क्योंकि मैं सांबा 4 के साथ विवश प्रतिनिधिमंडल का उपयोग नहीं कर सकता)।

अंतत: मैं काम कर रहे हाइपर-वी पर गया और रजिस्ट्री प्रविष्टियों को hklm: \ SOFTWARE \ नीतियाँ \ Microsoft \ Windows \ CredentialsDelegation पर नॉन-वर्किंग हाइपर-वी में कॉपी किया। उसके बाद दोनों तरह से ठीक काम किया।


रजिस्ट्री पेड़ की नकल मेरे लिए भी काम करती है। hklm: \ SOFTWARE \ ... \ CredentialsDelegation नोड मौजूद नहीं था, मान hklm में संग्रहीत किया गया था: \ SOFTWARE \ Wow6432Node \ ... \ CredentialsDelegation और HKEY_GERS \ _ \ समूह नीति ऑब्जेक्ट्स \ ... \ CredentialDelegation में।
Der_Meister 10
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.