PowerShell
Umgang mit Geheimnissen und Anmeldeinformationen
Suche…
Einführung
Um zu vermeiden, dass das Kennwort in Klartext gespeichert wird , verwenden wir in Powershell verschiedene Verschlüsselungsmethoden und speichern diese als sichere Zeichenfolge. Wenn Sie keinen Schlüssel oder einen sicheren Schlüssel angeben, funktioniert dies nur für denselben Benutzer auf demselben Computer. Er kann die verschlüsselte Zeichenfolge entschlüsseln, wenn Sie keine Schlüssel / Sicherungsschlüssel verwenden. Jeder Prozess, der unter demselben Benutzerkonto ausgeführt wird, kann diese verschlüsselte Zeichenfolge auf demselben Computer entschlüsseln.
Aufforderung zur Eingabe von Anmeldeinformationen
Um zur Eingabe von Get-Credential
aufzufordern, sollten Sie fast immer das Cmdlet Get-Credential
verwenden:
$credential = Get-Credential
Vorgefüllter Benutzername:
$credential = Get-Credential -UserName 'myUser'
Fügen Sie eine benutzerdefinierte Eingabeaufforderungsnachricht hinzu:
$credential = Get-Credential -Message 'Please enter your company email address and password.'
Zugriff auf das Klartext-Passwort
Das Kennwort in einem Berechtigungsnachweisobjekt ist verschlüsselt [SecureString]
. Der einfachste Weg ist, ein [NetworkCredential]
das das Passwort nicht verschlüsselt speichert:
$credential = Get-Credential
$plainPass = $credential.GetNetworkCredential().Password
Die .GetNetworkCredential()
( .GetNetworkCredential()
) ist nur für [PSCredential]
-Objekte vorhanden.
Um direkt mit einem [SecureString]
, verwenden Sie .NET-Methoden:
$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secStr)
$plainPass = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
Mit gespeicherten Anmeldeinformationen arbeiten
Verwenden Sie zum einfachen Speichern und Abrufen verschlüsselter Anmeldeinformationen die integrierte XML-Serialisierung (Clixml) von PowerShell:
$credential = Get-Credential
$credential | Export-CliXml -Path 'C:\My\Path\cred.xml'
So importieren Sie erneut:
$credential = Import-CliXml -Path 'C:\My\Path\cred.xml'
Zu beachten ist, dass standardmäßig die Windows-Datenschutz-API verwendet wird und der zum Verschlüsseln des Kennworts verwendete Schlüssel sowohl für den Benutzer als auch für den Computer gilt , auf dem der Code ausgeführt wird.
Daher kann der verschlüsselte Berechtigungsnachweis nicht von einem anderen Benutzer oder demselben Benutzer auf einem anderen Computer importiert werden.
Durch das Verschlüsseln mehrerer Versionen desselben Berechtigungsnachweises mit verschiedenen aktiven Benutzern und auf verschiedenen Computern können Sie das gleiche Geheimnis für mehrere Benutzer verfügbar machen.
Wenn Sie den Benutzernamen und den Computernamen in den Dateinamen eingeben, können Sie alle verschlüsselten Geheimnisse so speichern, dass derselbe Code ohne harte Kodierung verwendet werden kann:
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"
Der Code, der die gespeicherten Anmeldeinformationen verwendet:
$credential = Import-CliXml -Path "C:\My\Secrets\myCred_${env:USERNAME}_${env:COMPUTERNAME}.xml"
Die korrekte Version der Datei für den laufenden Benutzer wird automatisch geladen (oder schlägt fehl, da die Datei nicht vorhanden ist).
Speichern der Anmeldeinformationen in verschlüsselter Form und Übergeben der Parameter als Parameter, wenn erforderlich
$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.