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
Anfrage hat sich erledigt, Fehler in den Anmeldedaten
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?
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..
Vielen Dank für das Feedback, das hört man gerne.
Weiterhin viel Erfolg.
Viele Grüße
A. Koehler
Super Erklärung für die Verwendung von Passwörtern in PowerShell Skripten. Kompliment und danke. VG Michael
Vielen Dank für die Blumen, sogar so hoher Besuch von windows-faq. Ich fühle mich geehrt;-)
VG Alexander
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.
Hi Fabio,
the last line is only for demo. If you execute the variable you will see the user with password as object. With this variable you can authenticate.
Nothing special and you are right. It has no technical function.
Greetings.
Alexander
saya tidak mengerti sama sekali. apakah ada video nya ?
Hi,
same blogpost is available in english. https://blog.it-koehler.com/en/Archive/2355
Greetings
Sehr spannendes Thema von einem Profi erklärt 🙂