Szukaj…


Wprowadzenie

W Powershell, aby uniknąć przechowywania hasła w postaci zwykłego tekstu , używamy różnych metod szyfrowania i przechowujemy je jako bezpieczny ciąg. Jeśli nie określisz klucza ani klucza bezpiecznego, będzie to działać tylko w przypadku tego samego użytkownika na tym samym komputerze, który będzie mógł odszyfrować zaszyfrowany ciąg, jeśli nie używasz kluczy / kluczy bezpieczeństwa. Każdy proces działający na tym samym koncie użytkownika będzie mógł odszyfrować ten zaszyfrowany ciąg na tym samym komputerze.

Monitowanie o poświadczenia

Aby zapytać o poświadczenia, prawie zawsze należy użyć polecenia cmdlet Get-Credential :

$credential = Get-Credential

Wstępnie wypełniona nazwa użytkownika:

$credential = Get-Credential -UserName 'myUser'

Dodaj niestandardową wiadomość zachęty:

$credential = Get-Credential -Message 'Please enter your company email address and password.'

Dostęp do hasła w postaci zwykłego tekstu

Hasło w obiekcie referencji jest szyfrowane [SecureString] . Najprostszym sposobem jest uzyskanie [NetworkCredential] który nie przechowuje zaszyfrowanego hasła:

$credential = Get-Credential
$plainPass = $credential.GetNetworkCredential().Password

Metoda pomocnicza ( .GetNetworkCredential() ) istnieje tylko na [PSCredential] .
Aby bezpośrednio poradzić sobie z [SecureString] , użyj metod .NET:

$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secStr)
$plainPass = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)

Praca z zapisanymi poświadczeniami

Aby łatwo przechowywać i odzyskiwać zaszyfrowane dane uwierzytelniające, użyj wbudowanej serializacji XML PowerShell (Clixml):

$credential = Get-Credential

$credential | Export-CliXml -Path 'C:\My\Path\cred.xml'

Aby ponownie zaimportować:

$credential = Import-CliXml -Path 'C:\My\Path\cred.xml'

Ważną rzeczą do zapamiętania jest to, że domyślnie korzysta z interfejsu API ochrony danych systemu Windows, a klucz używany do szyfrowania hasła jest specyficzny zarówno dla użytkownika, jak i komputera , na którym działa kod.

W rezultacie zaszyfrowanego poświadczenia nie może zaimportować inny użytkownik ani ten sam użytkownik na innym komputerze.

Szyfrując kilka wersji tego samego poświadczenia dla różnych działających użytkowników i na różnych komputerach, możesz mieć ten sam klucz tajny dostępny dla wielu użytkowników.

Umieszczając nazwę użytkownika i komputera w nazwie pliku, możesz przechowywać wszystkie zaszyfrowane sekrety w sposób, który pozwala na użycie tego samego kodu bez użycia twardego kodu:

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"

Kod korzystający z przechowywanych poświadczeń:

$credential = Import-CliXml -Path "C:\My\Secrets\myCred_${env:USERNAME}_${env:COMPUTERNAME}.xml"

Prawidłowa wersja pliku dla uruchomionego użytkownika zostanie załadowana automatycznie (lub zawiedzie, ponieważ plik nie istnieje).

Przechowywanie poświadczeń w postaci zaszyfrowanej i przekazywanie ich jako parametru, gdy jest to wymagane

$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.


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow