दूरस्थ पॉवर्सशेल सत्र में क्रेडेंशियल्स कैसे बनाए रखें?


13

मेरे पास एक एज़्योर फाइल शेयर है और मैं अपने एज़्योर वीएम से इसका उपयोग करना चाहूंगा - वीएम पर क्रेडेंशियल्स को cmdkey के साथ जारी रखने और शुद्ध उपयोग के साथ माउंट करने के बाद। Windows Server 2012 R2 पर एक स्थानीय पॉवर्सशेल सत्र में इन कमांडों को चलाकर इसका परीक्षण किया गया था।

लेकिन मुझे यह कदम एक एज़्योर परिनियोजन स्क्रिप्ट में जोड़ने की आवश्यकता है। Azure Powershell स्क्रिप्ट मेरे लैपटॉप से ​​चलती है, Azure सदस्यता से कनेक्ट होती है और बहुत सारे वैरिएबल का उपयोग करके VMs को स्क्रैच से बनाता है।

नई बनाई गई VM पर दूरस्थ पॉवर्सशेल सत्र के लिए Azure पॉवर्सशेल स्क्रिप्ट से चर पास करने के लिए Invoke-Command का उपयोग करने के लिए पता लगाया गया।

$Session = New-PSSession -ConnectionUri $Uri -Credential $DomainCredential

$ScriptBlockContent = { 
Param ($Arg1,$Arg2,$Arg3)
cmdkey /add:$Arg1 /user:$Arg2 /pass:$Arg3}

Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent -ArgumentList ($Share,$AccountName,$Key)

और त्रुटि:

PS C:\> Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent -ArgumentList ($Share,$AccountName,$Key)
CMDKEY: Credentials cannot be saved from this logon session.

सिंटैक्स की जाँच करने के लिए cmdkey / list के साथ बदला गया, और कोई त्रुटि नहीं है।

PS C:\> Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent
Currently stored credentials:
* NONE *

Windows अद्यतन PowerShell मॉड्यूल (Invoke-WUInstall) के साथ एक समान मुद्दा था (और इसे ठीक नहीं कर सका), जो VM पर एक स्थानीय पॉवर्सशेल सत्र पर ठीक चलता है, लेकिन दूरस्थ पॉवर्सशेल के माध्यम से शुरू होने पर अपडेट नहीं होता है।

किसी भी तरह से यह चारों ओर पाने के लिए?

जवाबों:


2

Windows कैसे प्रमाणीकरण को संभालता है, इसके कारण रिमोट पॉवरशेल सत्र के माध्यम से क्रेडेंशियल्स सेट करने के लिए CMDKEY का उपयोग करना संभव नहीं है, CMDKEY का उपयोग करते समय इसे अंतःक्रियात्मक रूप से करना पड़ता है।

आपके समान उत्तर की तलाश में एक धागे से डॉन जोन्स को उद्धृत करने के लिए:

यह Cmdkey कमांड की एक सीमा है - वास्तव में एक PowerShell चीज नहीं है। लेकिन यह रीमोटिग क्रेडेंशियल्स को संभालने के तरीके से संबंधित है। दूरस्थ सत्र वास्तव में एक क्रेडेंशियल प्राप्त नहीं करता है, इसे एक प्रत्यायोजित टिकट मिलता है, इसलिए वास्तव में बचत करने के लिए कोई टोकन नहीं है। यह सब डिज़ाइन द्वारा है, न कि कुछ जिसे आप पुन: कॉन्फ़िगर कर सकते हैं।


2

यदि आप शेड्यूल किए गए कार्य का उपयोग नहीं करना चाहते हैं, तो आप Sysinternal के PsExec.exe का उपयोग कर सकते हैं । सामान्यतया, जब आप PowerShell सत्र प्रारंभ करते हैं, तो यह स्थानीय उपयोगकर्ता के बजाय cmdkey को विफल करने की servicesप्रक्रिया में चलता है (आप query sessionदूरस्थ कंप्यूटर पर कमांड चलाकर इसकी पुष्टि कर सकते हैं )।

इसे दूर करने के लिए, हमें cmdkey.exe को स्थानीय उपयोगकर्ता की प्रक्रिया में चलाने की आवश्यकता है PsExec.exe's -iजिसे ध्वज का उपयोग करके किया जा सकता है

प्रोग्राम को चलाएं ताकि यह रिमोट सिस्टम पर निर्दिष्ट सत्र के डेस्कटॉप के साथ इंटरैक्ट करे। यदि कोई सत्र निर्दिष्ट नहीं है, तो प्रक्रिया कंसोल सत्र में चलती है।

अब, दूरस्थ मशीन पर स्थानीय उपयोगकर्ता की सत्र आईडी प्राप्त करने की चुनौती है। मैंने इसे query sessionकमांड चलाकर हासिल किया जो मशीन पर सक्रिय सत्रों की एक सूची देता है। संभावित समाधानों में से एक है -

$processId = Invoke-Command $session -ScriptBlock  {
param($user)
    $sessions = query session $user;
    return $sessions[1].split(" ", [System.StringSplitOptions]::RemoveEmptyEntries)[2];

} -ArgumentList ($user)

यहां $userदूरस्थ कंप्यूटर पर स्थानीय उपयोगकर्ता का उपयोगकर्ता नाम है।

एक बार जब आप सत्र आईडी प्राप्त कर लेते हैं, तो आप बस निष्पादित कर सकते हैं

PsExec \\<computer_name> -u <local_user_name> -p <password> -h -i $processId cmdkey.exe /generic:testtt /user:userr /pass:pass

ध्यान दें:

  1. रिमोट मशीन पर उपयोगकर्ता की सत्र आईडी प्राप्त करने के लिए बेहतर तरीके हो सकते हैं।
  2. अभी, PsExec चलाते समय, मैं फिर से रिमोट सिस्टम के साथ एक संबंध बना रहा हूं, जिसे टाला जा सकता है (मैंने परीक्षण नहीं किया है)।
  3. कमांड चलाने वाले उपयोगकर्ता को रिमोट मशीन पर व्यवस्थापक एक्सेस होना चाहिए।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.