Kennwörter per Befehlszeilen-Skript abfragen

In einem Batch-Skript hatte ich die Anforderung, Kennwörter an andere Programmaufrufe zu übergeben.

Meine Rahmenbedingungen waren:

  1. Nicht im Klartext im CMD-Skript-Quelltext hinterlegen.
  2. Wenn eingegeben wird, nicht auf dem Bildschirm ausgeben.

Ich habe irgendwelchen Murks gefunden, wie das gehen könnte, eine elegante Lösung aus meiner Sicht nicht.

Lösung

Also habe ich einfach eine kleine Befehlszeilen-Anwendung mit dem .NET Framework geschrieben, um das zu erledigen.

Der gesamte Quelltext ist dieser hier:

using System;

static class Program
{
    static void Main()
    {
        var s = string.Empty;

        while (true)
        {
            var i = Console.ReadKey(true);
            if (i.Key == ConsoleKey.Enter)
            {
                break;
            }
            else
            {
                s += i.KeyChar;
            }
        }

        Console.Out.Write(s);
    }
}

Das Programm liest so lange Zeichen von der Tastatur, bis der Benutzer die Eingabe-Taste drückt.

Anschließend wird die Zeichenfolge als STDOUT zurückgegeben.

Verwendung

In einem Batch-Skript habe ich das dann z.B. so verwendet:

<nul: SET /P Host1Password=Kennwort eingeben: 
for /f "delims=" %%i in ('scriptpw.exe') do set MyPassword=%%i
echo .

Dadurch wird ein Text ausgegeben („Kennwort eingeben:“), und der Benutzer kann das Kennwort eingeben. Am Ende enthält dann die Umgebungsvariable MyPassword das Kennwort.

Verwendet werden kann das Kennwort dann ganz normal als Umgebungsvariable:

myapp --password %MyPassword% 

Läuft bei mir seit 3 Jahren sehr gut und stabil.

Falls Ihr das fertige EXE-Programm haben wollt, hier ist es: scriptpw.exe (5 KB)

Deine Lösung ist sehr elegant. Diese werde ich in Zukunft auch benützen.
Meine alte Lösung war:

programm-schreibt-password-in-tmpfile.exe
set var /p MyPassword=Kennword eingeben: < tmpfile
del tmpfile
1 Like