Passwörter in PowerShell Skripten benutzen -Prolog

The estimated reading time 3 minutes

Link Teil 1 PowerShell Skript zum Erstellen des verschlüsselten Passwortes
Link Teil 2 PowerShell Skript Klartextpasswort sichtbar machen

Bei meiner Arbeit kommt immer wieder die Frage auf, wie sollen Passwörter innerhalb eines Skriptes abgelegt werden. Möglichst natürlich gar nicht, das lässt sich aber leider nicht immer vermeiden. Deshalb möchte ich eine Methode vorstellen, welche es zumindest erlaubt das Passwort mit AES256 bit Verschlüsselung abzulegen. In diesem Artikel wird kurz erklärt wie es möglich ist ein Passwort mit einem einzigartigen AES256 bit Schlüssel zu verschlüsseln. Um das Passwort dann für diverse Authentifizierungen zu verwenden wird eine Schlüsseldatei und eine Passwortdatei benötigt, dazu später mehr. Diese Methode kann auch verwendet werden um Passwörter auf Netzwerkfreigaben abzulegen, sodass diese von diversen Skripten auf verschiedenen Servern genutzt werden können.
ACHTUNG:
Wer beide Dateien hat, kann das Passwort auf jeden Fall verwenden und auch wieder komplett sichtbar machen.
Sollte die Verschlüsselungsdatei verloren oder manipuliert werden, kann das Passwort nicht mehr herausgefunden werden. Deshalb sollten beide Dateien mit speziellen NTFS Berechtigungen geschützt werden.

Legen wir los mit einigen Grundlagen:

$aeskeypath = ".\aeskey.key"
$AESKey = New-Object Byte[] 32
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey)
Set-Content $aeskeypath $AESKey 

Dieser Code generiert einen einzigartigen AES 256 Bit Schlüssel und speichert diesen in der Datei „aeskey.key“ ( es ist nicht notwendig die Datei. key zu nennen, ich mache das hier lediglich der Übersicht halber)
Weitere Informationen zur Verschlüsselung:
https://docs.microsoft.com/de-de/dotnet/standard/security/cryptography-model

Passwortverschlüsselung mit der Verschlüsselungsdatei

Nun können wir ein Passwort mit Hilfe der generierten Datei verschlüsseln. Schauen wir uns das mal an.

$pw = Read-Host "type in a password!"-AsSecureString
$pw
$key = Get-Content .\aeskey.key
$encryptpw = $pw | ConvertFrom-SecureString -Key $key
#copy content to file 
Set-Content .\cred.txt $encryptpw

Die Variable $encryptpw enthält das eingegebene Passwort, welches dann mit der Verschlüsselungsdatei in einen Text umgewandelt wird. Gar nicht so schlecht.

Diese Grundlagen nutze ich um diesen Prozess zu automatisieren.
HINWEIS: sollte ein Buchstabe oder das Format der Datei geändert werden, bekommt man das Passwort nicht wieder zurück.
Außerdem möchte ich gerne zeigen, wie die beiden Dateien verwendet werden können um sich gegen diverse Dienste zu authentifizieren.

$username = Read-Host "Type Username!" 
$AESKey = Get-Content .\aeskey.key
$pwdTxt = Get-Content .\cred.txt
$securePwd = $pwdTxt | ConvertTo-SecureString -Key $AESKey
$creds = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securePwd
$creds

Verwendung des Credential Objektes

Wir können nun die Variable $creds verwenden um uns gegen Exchange Online zu authentifizieren. Es sind auch andere Microsoft Dienste und lokale Dienste im Netzwerk möglich.

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $creds -Authentication Basic -AllowRedirection
Import-PSSession $Session -DisableNameChecking -Verbose

Es sollte nun klar sein, dass diese Methode beliebig ausbaubar ist und in vielen Skripten Anwendung finden kann. Ich habe in den folgenden Artikeln ein Skript erstellt, welches die Konvertierung vornimmt und die beiden Dateien automatisch erstellt. Sollte euch der Artikel gefallen haben, drückt bitte auf „Helpful“. Freue mich auch über Kommentare und Anregungen.

Link Teil 1 PowerShell Skript zum Erstellen des verschlüsselten Passwortes
Link Teil 2 PowerShell Skript Klartextpasswort sichtbar machen

Was this article helpful?
YesNo
5 1 vote
Article Rating
Abonnieren
Benachrichtige mich bei
guest
11 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
Carsten
Carsten
6 Monate zuvor

Anfrage hat sich erledigt, Fehler in den Anmeldedaten

Carsten
Carsten
6 Monate zuvor

Danke für Anleitung,
mittels des password-store.ps1 habe ich die beiden Datenen erstellt, ich nutze dies um eine Office Installation mit einem privilegierten User zu starten, dafür verwende ich folgenden Befehl in einer Batch Datei
powershell -command „$SecureUser = ‚domäne\User‘; $SecurePasswordKey = Get-Content \\Pfad zur PasswortDatei; $key = Get-Contentet \\Pfad zur KeyDatei; $SecurePassword = $SecurePasswordKey | ConvertTo-SecureString -String -Key $key; $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $SecureUser, $SecurePassword; Start-Process -FilePath c:\temp\install_O2019.bat -Credential $cred“
es wird die Batchdatei gestartet die die Office Installation ausführt, ich werde aber trotzdem noch nach Benutzername und Passwort gefragt 🙁
Wo ist mein Fehler?

Adrian
Adrian
2 Jahre zuvor

Vielen Dank für diese tolle Anleitung! 🙂 Hatte zuvor noch auf anderen Websites geschaut und keine konnte mir verständlich vermitteln, wie das mit den Passwörtern in Powershell funktioniert..

Michael
2 Jahre zuvor

Super Erklärung für die Verwendung von Passwörtern in PowerShell Skripten. Kompliment und danke. VG Michael

Fabio O
Fabio O
3 Jahre zuvor

Thanks for the blogpost,
Just a short question. You wrote the following Code,

$username = Read-Host „Type Username!“
$AESKey = Get-Content .\aeskey.key
$pwdTxt = Get-Content .\cred.txt
$securePwd = $pwdTxt | ConvertTo-SecureString -Key $AESKey
$creds = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securePwd
$creds

To say this first I’m not really knowledgeable when it comes to PowerShell or coding in general (at the moment). Whats does the last line do? ($creds) I don’t really see the need for it.

artgrafter
3 Jahre zuvor

saya tidak mengerti sama sekali. apakah ada video nya ?

Herr Becker
5 Jahre zuvor

Sehr spannendes Thema von einem Profi erklärt 🙂