Sök…


Introduktion

I Powershell använder vi olika krypteringsmetoder för att undvika att lagra lösenordet i tydlig text och lagra det som säker sträng. När du inte anger en nyckel eller ett säkerhetsfunktion fungerar det bara för att samma användare på samma dator kommer att kunna dekryptera den krypterade strängen om du inte använder Keys / SecureKeys. Varje process som körs under samma användarkonto kan dekryptera den krypterade strängen på samma maskin.

Fråga om referenser

För att be om referenser bör du nästan alltid använda Get-Credential cmdlet:

$credential = Get-Credential

Förfyllt användarnamn:

$credential = Get-Credential -UserName 'myUser'

Lägg till ett anpassat snabbmeddelande:

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

Åtkomst till Vanligt lösenord

Lösenordet i ett referensobjekt är ett krypterat [SecureString] . Det mest enkla sättet är att få en [NetworkCredential] som inte lagrar krypterat lösenord:

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

.GetNetworkCredential() ( .GetNetworkCredential() ) finns bara på [PSCredential] -objekt.
För att direkt hantera en [SecureString] använder du .NET-metoder:

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

Arbeta med lagrade referenser

För att enkelt lagra och hämta krypterade referenser använder du PowerShells inbyggda XML-serialisering (Clixml):

$credential = Get-Credential

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

Så här importerar du:

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

Det viktiga att komma ihåg är att detta som standard använder Windows-dataskydds-API, och nyckeln som används för att kryptera lösenordet är specifik för både användaren och maskinen som koden körs under.

Som ett resultat kan den krypterade referensen inte importeras av en annan användare eller samma användare på en annan dator.

Genom att kryptera flera versioner av samma referens med olika användare som körs och på olika datorer kan du ha samma hemlighet för flera användare.

Genom att sätta användaren och datornamnet i filnamnet kan du lagra alla de krypterade hemligheterna på ett sätt som gör att samma kod kan använda dem utan att hårdkoda något:

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"

Koden som använder lagrade referenser:

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

Rätt version av filen för den löpande användaren laddas automatiskt (eller så misslyckas eftersom filen inte finns).

Lagring av referenser i krypterad form och skicka det som parameter när det krävs

$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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow