PowerShell
राज और साख को संभालना
खोज…
परिचय
पॉवर्सशेल में, क्लियर टेक्स्ट में पासवर्ड स्टोर करने से बचने के लिए, हम एन्क्रिप्शन के विभिन्न तरीकों का उपयोग करते हैं और इसे सुरक्षित स्ट्रिंग के रूप में संग्रहीत करते हैं। जब आप किसी कुंजी या सिक्योरिटी को निर्दिष्ट नहीं कर रहे हैं, तो यह केवल उसी उपयोगकर्ता के लिए उसी कंप्यूटर पर काम करेगा जब आप कुंजी / सिक्योरकेस का उपयोग नहीं कर रहे हैं तो एन्क्रिप्टेड स्ट्रिंग को डिक्रिप्ट कर पाएंगे। उसी उपयोगकर्ता खाते के तहत चलने वाली कोई भी प्रक्रिया उसी मशीन पर उस एन्क्रिप्टेड स्ट्रिंग को डिक्रिप्ट कर सकेगी।
क्रेडेंशियल के लिए शीघ्र
क्रेडेंशियल के लिए संकेत करने के लिए, आपको लगभग हमेशा Get-Credential
cmdlet का उपयोग करना चाहिए:
$credential = Get-Credential
पूर्व-भरा हुआ उपयोगकर्ता नाम:
$credential = Get-Credential -UserName 'myUser'
एक कस्टम प्रॉम्प्ट संदेश जोड़ें:
$credential = Get-Credential -Message 'Please enter your company email address and password.'
प्लेनटेक्स्ट पासवर्ड एक्सेस करना
एक क्रेडेंशियल ऑब्जेक्ट में पासवर्ड एक एन्क्रिप्टेड [SecureString]
। सबसे सरल तरीका एक [NetworkCredential]
जो पासवर्ड एन्क्रिप्टेड स्टोर नहीं करता है:
$credential = Get-Credential
$plainPass = $credential.GetNetworkCredential().Password
सहायक विधि ( .GetNetworkCredential()
) केवल [PSCredential]
ऑब्जेक्ट पर मौजूद है।
[SecureString]
सीधे निपटने के लिए, .NET विधियों का उपयोग करें:
$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secStr)
$plainPass = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
संग्रहीत क्रेडेंशियल्स के साथ काम करना
एन्क्रिप्टेड क्रेडेंशियल्स को आसानी से संग्रहीत और पुनर्प्राप्त करने के लिए, PowerShell के अंतर्निहित XML क्रमांकन (Clixml) का उपयोग करें:
$credential = Get-Credential
$credential | Export-CliXml -Path 'C:\My\Path\cred.xml'
फिर से आयात करने के लिए:
$credential = Import-CliXml -Path 'C:\My\Path\cred.xml'
याद रखने वाली महत्वपूर्ण बात यह है कि डिफ़ॉल्ट रूप से यह विंडोज डेटा सुरक्षा एपीआई का उपयोग करता है, और पासवर्ड को एन्क्रिप्ट करने के लिए उपयोग की जाने वाली कुंजी उपयोगकर्ता और मशीन दोनों के लिए विशिष्ट है जो कोड के तहत चल रहा है।
नतीजतन, एन्क्रिप्टेड क्रेडेंशियल एक अलग उपयोगकर्ता द्वारा आयात नहीं किया जा सकता है और न ही एक अलग कंप्यूटर पर एक ही उपयोगकर्ता।
अलग-अलग चल रहे उपयोगकर्ताओं और विभिन्न कंप्यूटरों पर एक ही क्रेडेंशियल के कई संस्करणों को एन्क्रिप्ट करके, आप एक ही रहस्य को कई उपयोगकर्ताओं के लिए उपलब्ध कर सकते हैं।
फ़ाइल नाम में उपयोगकर्ता और कंप्यूटर का नाम डालकर, आप सभी एन्क्रिप्ट किए गए रहस्यों को इस तरह से स्टोर कर सकते हैं, जो समान कोड के लिए उन्हें बिना हार्ड कोडिंग के कुछ भी उपयोग करने की अनुमति देता है:
encrypter
# run as each user, and on each computer
$credential = Get-Credential
$credential | Export-CliXml -Path "C:\My\Secrets\myCred_${env:USERNAME}_${env:COMPUTERNAME}.xml"
संग्रहीत क्रेडेंशियल्स का उपयोग करने वाला कोड:
$credential = Import-CliXml -Path "C:\My\Secrets\myCred_${env:USERNAME}_${env:COMPUTERNAME}.xml"
चल रहे उपयोगकर्ता के लिए फ़ाइल का सही संस्करण स्वचालित रूप से लोड किया जाएगा (या यह विफल हो जाएगा क्योंकि फ़ाइल मौजूद नहीं है)।
एन्क्रिप्ट किए गए फॉर्म में क्रेडेंशियल्स को स्टोर करना और आवश्यक होने पर इसे पैरामीटर के रूप में पास करना
$username = "[email protected]"
$pwdTxt = Get-Content "C:\temp\Stored_Password.txt"
$securePwd = $pwdTxt | ConvertTo-SecureString
$credObject = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securePwd
# Now, $credObject is having the credentials stored and you can pass it wherever you want.
## Import Password with AES
$username = "[email protected]"
$AESKey = Get-Content $AESKeyFilePath
$pwdTxt = Get-Content $SecurePwdFilePath
$securePwd = $pwdTxt | ConvertTo-SecureString -Key $AESKey
$credObject = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securePwd
# Now, $credObject is having the credentials stored with AES Key and you can pass it wherever you want.