(OpenVPN) Zertifikate erstellen per Batch
Hallöle zusammen
Seit circa einer Woche durchforste ich die Tiefen des Internets nach einer passenden Lösung für mein Problem und doch wurde ich bisher nicht fündig, bzw fand ich nichts, was mir mit meinem aktuellen Kenntnisstand in irgeneiner Weise weiter half.
Ich bin in der Ausbildung zum Systemintegrator & habe primär nichts mit Programmierung zu tun, da mich die Materie allerdings sehr interessiert, bringe ich mir diese gerne selber bei. Da ich noch Anfänger bin, fehlt mir allerdings einfach noch ne Menge Wissen.
Ich wurde damit beauftragt eine Batch zu erstellen, welche automatisiert Zertifikate für eine VPN-Verbindung erstellt.
Wie ich das in der Kommandozeile an sich mache weiß ich mittlerweile aus dem FF aber um das Ganze in eine Batch umzusetzen, fehlt mir dann doch das know-how.
Bisher habe ich mich so weit in die Materie gewuselt, dass bestimmte Dinge hin und wieder (oder auch mal gar nicht) funktionieren und bin mittlerweile leider ratlos.
Hier mal der Code:
Ich kann in der CMD zwar eine Auswahl treffen und ich bekomme das entsprechende ECHO dazu, an den Dateien ändert sich jedoch gar nichts.
Schritt 1: Hier, was sie (grob übersetzt) tun soll:
Gültigkeit festlegen:
bei Eingabe x (1/2/3/4/5), ersetze entsprechende Gültigkeit (Textzeile: (standardmäßig) -days 3650) auf anzahl Tage: xxxxx (3650/7300/10950/14600/18250) in folgenden Dateien:
build-ca.bat
build-key.bat
build-key-pass.bat
build-key-pkcs12.bat
build-key-server.bat.
Hier noch ein weiterer Versuch, etwas ausladender aber leider auch komplizierter für mich:
(CMD Ausgabe unten)
Das war zwar bloß der Anfang & ich werde eure Hilfe sicher nochmal benötigen aber alles Schritt für Schritt..
Danke im Voraus!
Seit circa einer Woche durchforste ich die Tiefen des Internets nach einer passenden Lösung für mein Problem und doch wurde ich bisher nicht fündig, bzw fand ich nichts, was mir mit meinem aktuellen Kenntnisstand in irgeneiner Weise weiter half.
Ich bin in der Ausbildung zum Systemintegrator & habe primär nichts mit Programmierung zu tun, da mich die Materie allerdings sehr interessiert, bringe ich mir diese gerne selber bei. Da ich noch Anfänger bin, fehlt mir allerdings einfach noch ne Menge Wissen.
Ich wurde damit beauftragt eine Batch zu erstellen, welche automatisiert Zertifikate für eine VPN-Verbindung erstellt.
Wie ich das in der Kommandozeile an sich mache weiß ich mittlerweile aus dem FF aber um das Ganze in eine Batch umzusetzen, fehlt mir dann doch das know-how.
Bisher habe ich mich so weit in die Materie gewuselt, dass bestimmte Dinge hin und wieder (oder auch mal gar nicht) funktionieren und bin mittlerweile leider ratlos.
Hier mal der Code:
@echo off
set home=C:\Program Files\OpenVPN\easy-rsa
cd %home%
echo %cd%
:start
SETLOCAL enabledelayedexpansion
@echo Geben Sie die Gueltigkeit des Zertifikats an:
@echo [1] = 10 Jahre; [2] = 20 Jahre; [3] = 30 Jahre; [4] = 40 Jahre; [5] = 50 Jahre
SET /P Jahre=Eingabe:
IF %Jahre% == 1 (
ECHO Gueltigkeit auf 10 Jahre festgelegt.
SET "build-ca.bat=C:\Program Files\OpenVPN\easy-rsa\build-ca.bat" (Habe hier jz nur eine Datei angegeben, sind aber insgesamt 5 die geändert werden müssen).
SET "suchen=3650"
SET "ersetzen_durch=3650"
) ELSE (
IF %Jahre% == 2 (
ECHO Gueltigkeit auf 20 Jahre festgelegt.
SET "build-ca.bat=C:\Program Files\OpenVPN\easy-rsa\build-ca.bat"
SET "suchen=3650"
SET "ersetzen_durch=7300"
) ELSE (
IF %Jahre% == 3 (
ECHO Gueltigkeit auf 30 Jahre festgelegt.
SET "build-ca.bat=C:\Program Files\OpenVPN\easy-rsa\build-ca.bat"
SET "suchen=3650"
SET "ersetzen_durch=10950"
) ELSE (
IF %Jahre% == 4 (
ECHO Gueltigkeit auf 40 Jahre festgelegt.
SET "build-ca.bat=C:\Program Files\OpenVPN\easy-rsa\build-ca.bat"
SET "suchen=3650"
SET "ersetzen_durch=14600"
) ELSE (
IF %Jahre% == 5 (
ECHO Gueltigkeit auf 50 Jahre festgelegt.
SET "build-ca.bat=C:\Program Files\OpenVPN\easy-rsa\build-ca.bat"
SET "suchen=3650"
SET "ersetzen_durch=18250"
) ELSE (
IF %Jahre% GTR 5 (
goto start
ECHO Ungueltige Eingabe.
IF %Jahre% LSS 1 (
goto start
ECHO Ungueltige Eingabe.
)
)
)
)
)
)
Schritt 1: Hier, was sie (grob übersetzt) tun soll:
Gültigkeit festlegen:
bei Eingabe x (1/2/3/4/5), ersetze entsprechende Gültigkeit (Textzeile: (standardmäßig) -days 3650) auf anzahl Tage: xxxxx (3650/7300/10950/14600/18250) in folgenden Dateien:
build-ca.bat
build-key.bat
build-key-pass.bat
build-key-pkcs12.bat
build-key-server.bat.
Hier noch ein weiterer Versuch, etwas ausladender aber leider auch komplizierter für mich:
(CMD Ausgabe unten)
@echo off
set home=C:\Program Files\OpenVPN\easy-rsa
cd %home%
echo %cd%
:start
SETLOCAL enabledelayedexpansion
@echo Geben Sie die Gueltigkeit des Zertifikats an:
@echo [1] = 10 Jahre; [2] = 20 Jahre; [3] = 30 Jahre; [4] = 40 Jahre; [5] = 50 Jahre
set /p validity=Eingabe:
if %validity%==1 (
echo Gueltigkeit auf 10 Jahre festgelegt.
set gueltigkeit=3650
)
if %validity%==2 (
echo Gueltigkeit auf 20 Jahre festgelegt.
set gueltigkeit=7300
)
if %validity%==3 (
echo Gueltigkeit auf 30 Jahre festgelegt.
set gueltigkeit=10950
)
if %validity%==4 (
echo Gueltigkeit auf 40 Jahre festgelegt.
set gueltigkeit=14600
)
if %validity%==5 (
echo echo Gueltigkeit auf 50 Jahre festgelegt.
set gueltigkeit=18250
)
if %validity% GTR 5 (
echo Ungueltige Eingabe.
goto start
)
if %validity% LSS 1 (
echo Ungueltige Eingabe.
goto start
)
PAUSE
@echo off
goto :if
:if %gueltigkeit% (
set files=build-ca
set files[1]=build-key
set files[2]=build-key-pass
set files[3]=build-key-pkcs12
set files[4]=build-key-server
set "x=0"
:SymLoop
if defined files[%x%] (
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "INTEXTFILE=%%files[%x%].bat"
set "OUTTEXTFILE=%%files[%x%]_temp.bat"
set "REPLACETEXT=3650"
findstr /m "-days 3650" %INTEXTFILE%
if %errorlevel%==0 (
set bisherigeGueltigkeit=3650
)
findstr /m "-days 7300" %INTEXTFILE%
if %errorlevel%==0 (
set bisherigeGueltigkeit=7300
)
findstr /m "-days 10950" %INTEXTFILE%
if %errorlevel%==0 (
set bisherigeGueltigkeit=10950
)
findstr /m "-days 14600" %INTEXTFILE%
if %errorlevel%==0 (
set bisherigeGueltigkeit=14600
)
findstr /m "-days 18250" %INTEXTFILE%
if %errorlevel%==0 (
set bisherigeGueltigkeit=18250
)
set /a "x+=1"
set "SEARCHTEXT=%bisherigeGueltigkeit%"
set "REPLACETEXT=%gueltigkeit%"
set "modified=!%SEARCHTEXT%=%REPLACETEXT%!"
echo !modified!>>"%OUTTEXTFILE%"
)
del "%INTEXTFILE%"
rename "%OUTTEXTFILE%" "%INTEXTFILE%"
goto :SymLoop
) else (
echo "Bitte treffen Sie eine gültige Auswahl!"
PAUSE
goto :Choose
)
)
Das war zwar bloß der Anfang & ich werde eure Hilfe sicher nochmal benötigen aber alles Schritt für Schritt..
Danke im Voraus!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1128881978
Url: https://administrator.de/contentid/1128881978
Ausgedruckt am: 23.11.2024 um 13:11 Uhr
9 Kommentare
Neuester Kommentar
Du suchst nach Werten in einer Datei und ersetzt sie durch neue Werte.
Anstatt die Textdatei (oder .bat Datei) zu modifizieren würde ich die Ergebnisse der Fragen in eine Variable schreiben und dann die Tools mit den Variablen als Schalter aufrufen.
Also statt:
openssl req -days 3650 ...
solltest du dann direkt unten den Fragen einfach
openssl req -days $days ...
ausführen.
Anstatt die Textdatei (oder .bat Datei) zu modifizieren würde ich die Ergebnisse der Fragen in eine Variable schreiben und dann die Tools mit den Variablen als Schalter aufrufen.
Also statt:
openssl req -days 3650 ...
solltest du dann direkt unten den Fragen einfach
openssl req -days $days ...
ausführen.
Hallo,
also in der ersten Batch setzt du ja nur die "suchen" und die "ersetzen_durch" variable. Aber ein tatsächliches suchen und ersetzen sehe ich hier nicht.
Grundsätzlich kannst du ja die Anzahl an Tagen, wenn er in diesen 5 Batches die aufgerufen werden sollen, als Parameter mit übergeben. Dann musst du nicht erst was suchen und ersetzen sondern gibst die Dauer direkt einfach mit.
z.B.
Aufruf:
Das funktioniert natürlich entsprechen in allen 5 Batches.
Gruß
...
also in der ersten Batch setzt du ja nur die "suchen" und die "ersetzen_durch" variable. Aber ein tatsächliches suchen und ersetzen sehe ich hier nicht.
Grundsätzlich kannst du ja die Anzahl an Tagen, wenn er in diesen 5 Batches die aufgerufen werden sollen, als Parameter mit übergeben. Dann musst du nicht erst was suchen und ersetzen sondern gibst die Dauer direkt einfach mit.
z.B.
Aufruf:
build-ca.bat 7300
und in der build-ca.bat dann so verwendenset "dauer=%~1"
Das funktioniert natürlich entsprechen in allen 5 Batches.
Gruß
...
Moin,
die Gültigkeitsabfrage würde ich mit Powershell machen - weil weniger Code, nicht so fehleranfällig und die Anzahl an Tagen kann exakt aus der eingegebenen Jahresanzahl errechnet werden.
Wie @miniversum schon gesagt hat, sollte man dann nicht die Skripte per suchen und ersetzen abändern, sondern die Tage einfach als Argument an die jeweiligen Batchskripte übergeben.
Gruß Thomas
die Gültigkeitsabfrage würde ich mit Powershell machen - weil weniger Code, nicht so fehleranfällig und die Anzahl an Tagen kann exakt aus der eingegebenen Jahresanzahl errechnet werden.
Wie @miniversum schon gesagt hat, sollte man dann nicht die Skripte per suchen und ersetzen abändern, sondern die Tage einfach als Argument an die jeweiligen Batchskripte übergeben.
# Quellordner, indem die Batch-Skripte liegen
$Source = "C:\Program Files\OpenVPN\easy-rsa"
# Maximale Gültigkeit in Jahren
$Max = 50
# Abfrage der Gültigkeit
$Years = Read-Host "Gültigkeit in Jahren"
# Falls Eingabe falsch, frage so lange erneut, bis eine gültige Zahl eingegeben wurde
while (1..$Max -NotContains $Years){
write-host -ForegroundColor 'red' "Keine gültige Zahl zwischen 1 und $Max eingegeben. "
$Years = Read-Host "Gültigkeit in Jahren"
}
# Anzahl der Tage ermitteln
[int]$Tage = (New-TimeSpan -End (Get-Date).AddYears($Years)).TotalDays
write-host "Gültigkeit auf $Years Jahre ($Tage Tage) festgelegt. "
# Die Anzahl an Tagen an jede Batch im Quellordner übergeben
Foreach ($File in Get-ChildItem -File -Path "$Source\*.bat") { &$File.Fullname $Tage }
Gruß Thomas