From 4b76addbaa5e3652da67ac8bbaefd03755496470 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 5 Aug 2026 19:35:01 +0200 Subject: [PATCH] =?UTF-8?q?Neue=20Skripte=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SCRIPTE-VEEAM/VEEAM-MSSQL.ps1 | 603 +++++++++++++++ SCRIPTE-VEEAM/VEEAM-MSSQL_v.1.1.ps1 | 614 ++++++++++++++++ SCRIPTE-VEEAM/VEEAM-MSSQL_v.1.2.ps1 | 1022 ++++++++++++++++++++++++++ SCRIPTE_ALT/full_import_ALL_cert.sh | 541 ++++++++++++++ SCRIPTE_ALT/full_install_ADDC_DLZ.sh | 176 +++++ 5 files changed, 2956 insertions(+) create mode 100755 SCRIPTE-VEEAM/VEEAM-MSSQL.ps1 create mode 100755 SCRIPTE-VEEAM/VEEAM-MSSQL_v.1.1.ps1 create mode 100755 SCRIPTE-VEEAM/VEEAM-MSSQL_v.1.2.ps1 create mode 100755 SCRIPTE_ALT/full_import_ALL_cert.sh create mode 100755 SCRIPTE_ALT/full_install_ADDC_DLZ.sh diff --git a/SCRIPTE-VEEAM/VEEAM-MSSQL.ps1 b/SCRIPTE-VEEAM/VEEAM-MSSQL.ps1 new file mode 100755 index 0000000..23d6287 --- /dev/null +++ b/SCRIPTE-VEEAM/VEEAM-MSSQL.ps1 @@ -0,0 +1,603 @@ +#Requires -RunAsAdministrator + +<# +.SYNOPSIS + Unattended Installation Veeam Backup & Replication v13 + +.DESCRIPTION + Installation von Veeam Backup & Replication v13 + mit vorhandener Microsoft SQL Server 2019 Instanz. + + Quelle: + \\172.68.1.1\Sources + + Datenbank: + \VEEAMSQLSERVER + +#> + + +############################################################ +# VARIABLEN +############################################################ + +############################################################ +# INSTALLATIONSQUELLEN +############################################################ + +# Lokale DVD / ISO Quelle +$DVDSource = "E:\" + + +# Netzwerkquelle +$NetworkSource = "\\172.68.1.1\Sources" + + + +############################################################ +# QUELLE AUSWÄHLEN +############################################################ + +Write-Host "" +Write-Host "Veeam Installationsquelle" +Write-Host "=========================" +Write-Host "1 = DVD / ISO Quelle ($DVDSource)" +Write-Host "2 = Netzwerkquelle ($NetworkSource)" +Write-Host "" + + +$SourceChoice = Read-Host "Quelle auswählen (1 oder 2)" + + + +switch ($SourceChoice) +{ + + "1" + { + + $VeeamSource = $DVDSource + + Write-Host "" + Write-Host "Lokale Quelle gewählt:" + Write-Host $VeeamSource + + } + + + + "2" + { + + $VeeamSource = $NetworkSource + + + Write-Host "" + Write-Host "Anmeldung an Netzwerkquelle" + + + $Credential = Get-Credential + + + + try + { + + New-PSDrive ` + -Name "VEEAMSRC" ` + -PSProvider FileSystem ` + -Root $VeeamSource ` + -Credential $Credential ` + -ErrorAction Stop | Out-Null + + + + $VeeamSource = "VEEAMSRC:\" + + + Write-Host "" + Write-Host "Netzwerkquelle verbunden:" + Write-Host $VeeamSource + + } + + catch + { + + Write-Host "" + Write-Host "Fehler beim Verbinden der Netzwerkquelle" + Write-Host $_.Exception.Message + + exit 1 + + } + + } + + + + default + { + + Write-Host "Ungültige Auswahl" + exit 1 + + } + +} + + +# Installer +$VeeamInstaller = ` +"$VeeamSource\Setup\Silent\Veeam.Silent.Install.exe" + + +# Antwortdatei +$AnswerFileSource = ` +"$VeeamSource\Setup\Silent\AnswerFiles\VBR\VbrAnswerFile_install.xml" + + + +# Arbeitsverzeichnis lokal +$WorkDir = "C:\Temp\VeeamInstall" + +$LogDir = "$WorkDir\Logs" + + + +# Lizenz +$LicenseSource = "$VeeamSource\License\veeam.lic" + +$LicenseTarget = "$WorkDir\veeam.lic" + + + +# Servername +$VeeamServerName = $env:COMPUTERNAME + + +# SQL Server +$SQLInstanceName = "VEEAMSQLSERVER" + +$SQLConnection = ` +"$VeeamServerName\$SQLInstanceName" + + +# SQL Datenbank +$DatabaseName = "VeeamBackup" + + +# 0 = Windows Authentication +$SQLAuthentication = 0 + + + +# Installationspfade + +$InstallPath = "F:\Program Files\Veeam\Backup and Replication" + + +$CatalogPath = "H:\VBRCatalog" + + +$IRCachePath = "F:\ProgramData\Veeam\Backup\IRCache" + + + +# Ports + +$GuestCatalogPort = 9393 + +$VeeamServicePort = 9392 + +$SecureConnectionPort = 9401 + +$RestServicePort = 9419 + + + +# Plugins deaktivieren + +$Plugins = @{ + "AHV_INSTALL" = 0 + "KVM_INSTALL" = 0 + "PVE_INSTALL" = 0 + "SCP_INSTALL" = 0 + "AWS_INSTALL" = 0 + "AZURE_INSTALL" = 0 + "GCP_INSTALL" = 0 + "KASTEN_INSTALL" = 0 +} + + + +# Neustart nicht automatisch + +$RebootRequired = 0 + + + +############################################################ +# FUNKTIONEN +############################################################ + +function Write-Log { + + param( + [string]$Message + ) + + $Time = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + + "$Time - $Message" | + Tee-Object ` + -FilePath "$LogDir\Install.log" ` + -Append + +} + + + +############################################################ +# START +############################################################ + +Write-Log "==== Veeam v13 Installation gestartet ====" + + + +############################################################ +# Verzeichnisse +############################################################ + +New-Item ` +$WorkDir ` +-ItemType Directory ` +-Force | Out-Null + + +New-Item ` +$LogDir ` +-ItemType Directory ` +-Force | Out-Null + + + +############################################################ +# Quelle prüfen +############################################################ + +if (!(Test-Path $VeeamInstaller)) { + + Write-Log "FEHLER: Installer nicht gefunden" + + exit 1 +} + + +Write-Log "Installationsquelle OK" + + + +############################################################ +# SQL Prüfung +############################################################ + +Write-Log "Prüfe SQL Verbindung" + + + +#$SQLTest = Test-NetConnection ` +#-ComputerName $VeeamServerName ` +#-Port 1433 + + + +if (!$SQLTest.TcpTestSucceeded) { + + Write-Log ` + "WARNUNG: SQL Port 1433 nicht erreichbar" + +} + +############################################################ +# LIZENZ PRÜFEN +############################################################ + +$UseLicenseFile = $false + + +if(Test-Path $LicenseSource) +{ + + Copy-Item ` + $LicenseSource ` + $LicenseTarget ` + -Force + + + $UseLicenseFile = $true + + Write-Log "Lizenzdatei gefunden: $LicenseTarget" + +} +else +{ + + Write-Log "Keine Lizenzdatei gefunden." + Write-Log "Installation wird als Community Edition durchgeführt." + +} + + +############################################################ +# Antwortdatei kopieren +############################################################ + +$AnswerFile = ` +"$WorkDir\VbrAnswerFile_install.xml" + + +Copy-Item ` +$AnswerFileSource ` +$AnswerFile ` +-Force + + + +############################################################ +# XML bearbeiten +############################################################ + +Write-Log "Passe Antwortdatei an" + + + +[xml]$XML = Get-Content $AnswerFile + + + +foreach($Property in ` +$XML.unattendedInstallationConfiguration.properties.property) +{ + + +switch($Property.name) +{ + +"ACCEPT_EULA" +{ +$Property.value="1" +} + + +"ACCEPT_LICENSING_POLICY" +{ +$Property.value="1" +} + + +"ACCEPT_THIRDPARTY_LICENSES" +{ +$Property.value="1" +} + + +"ACCEPT_REQUIRED_SOFTWARE" +{ +$Property.value="1" +} + + + +"VBR_LICENSE_FILE" +{ + if($UseLicenseFile) + { + $Property.value=$LicenseTarget + } + else + { + $Property.value="0" + } +} + + + +"VBR_SQLSERVER_INSTALL" +{ +$Property.value="0" +} + + + +"VBR_SQLSERVER_ENGINE" +{ +$Property.value="0" +} + + + +"VBR_SQLSERVER_SERVER" +{ +$Property.value=$SQLConnection +} + + + +"VBR_SQLSERVER_DATABASE" +{ +$Property.value=$DatabaseName +} + + + +"VBR_SQLSERVER_AUTHENTICATION" +{ +$Property.value=$SQLAuthentication +} + + + +"VBR_ENTRAID_DATABASE_INSTALL" +{ +$Property.value="0" +} + + + +"INSTALLDIR" +{ +$Property.value=$InstallPath +} + + + +"VM_CATALOGPATH" +{ +$Property.value=$CatalogPath +} + + + +"VBR_IRCACHE" +{ +$Property.value=$IRCachePath +} + + + +"VBRC_SERVICE_PORT" +{ +$Property.value=$GuestCatalogPort +} + + + +"VBR_SERVICE_PORT" +{ +$Property.value=$VeeamServicePort +} + + + +"VBR_SECURE_CONNECTIONS_PORT" +{ +$Property.value=$SecureConnectionPort +} + + + +"VBR_RESTSERVICE_PORT" +{ +$Property.value=$RestServicePort +} + + + +"REBOOT_IF_REQUIRED" +{ +$Property.value=$RebootRequired +} + + +default +{ + if($Plugins.ContainsKey($Property.name)) + { + $Property.value=$Plugins[$Property.name] + } +} + +} + + +} + + + +$XML.Save($AnswerFile) + + + +############################################################ +# Installation +############################################################ + +Write-Log "Starte Veeam Installation" + + + +$Arguments = @( +"/AnswerFile" +"`"$AnswerFile`"" +"/SkipNetworkLogonErrors" +) + + + +$Process = Start-Process ` +-FilePath $VeeamInstaller ` +-ArgumentList $Arguments ` +-Wait ` +-PassThru + + + +############################################################ +# Ergebnis +############################################################ + +Write-Log ` +"Installer ExitCode: $($Process.ExitCode)" + + + +switch($Process.ExitCode) +{ + + +0 +{ + +Write-Log ` +"Installation erfolgreich" + +} + + + +3010 +{ + +Write-Log ` +"Installation erfolgreich - Neustart erforderlich" + +} + + + +default +{ + +Write-Log ` +"Installation FEHLGESCHLAGEN" + +exit $Process.ExitCode + +} + + +} + + + +Write-Log ` +"==== Veeam Installation beendet ====" + + + +Write-Host "" +Write-Host "Installation abgeschlossen." +Write-Host "Log:" +Write-Host "$LogDir\Install.log" \ No newline at end of file diff --git a/SCRIPTE-VEEAM/VEEAM-MSSQL_v.1.1.ps1 b/SCRIPTE-VEEAM/VEEAM-MSSQL_v.1.1.ps1 new file mode 100755 index 0000000..65d5a50 --- /dev/null +++ b/SCRIPTE-VEEAM/VEEAM-MSSQL_v.1.1.ps1 @@ -0,0 +1,614 @@ +#Requires -RunAsAdministrator + +$ErrorActionPreference = "Stop" + +# CLEAN INSTALL +$Pfad = "C:\Temp\VeeamInstall" + +if (Test-Path $Pfad) { + try { + Remove-Item -Path $Pfad -Recurse -Force -ErrorAction Stop + Write-Host "Alte VeeamInstall-Dateien entfernt." + } + catch { + Write-Host "Fehler beim Löschen: $_" + exit 1 + } +} + +# Weiter mit Installation + + +<# +.SYNOPSIS + Unattended Installation Veeam Backup & Replication v13 + +.DESCRIPTION + Installation von Veeam Backup & Replication v13 + mit vorhandener Microsoft SQL Server 2019 Instanz. + + Quelle: + DVD oder Netzwerkquelle + + Datenbank: + \VEEAMSQLSERVER + +#> + + +############################################################ +# VARIABLEN +############################################################ + +# Quelle DVD +$DVDSource = "E:\" + + +# Quelle Netzwerk +$NetworkSource = "\\172.68.1.1\Sources" + + + +############################################################ +# INSTALLATIONSQUELLE AUSWÄHLEN +############################################################ + +Write-Host "" +Write-Host "Veeam Installationsquelle" +Write-Host "=========================" +Write-Host "1 = DVD / ISO Quelle ($DVDSource)" +Write-Host "2 = Netzwerkquelle ($NetworkSource)" +Write-Host "" + + +$SourceChoice = Read-Host "Quelle auswählen (1 oder 2)" + + +switch ($SourceChoice) +{ + + "1" + { + + $VeeamSource = $DVDSource + + Write-Host "" + Write-Host "Lokale Quelle gewählt:" + Write-Host $VeeamSource + + } + + + "2" + { + + $VeeamSource = $NetworkSource + + + Write-Host "" + Write-Host "Anmeldung an Netzwerkquelle" + + + $Credential = Get-Credential + + + + New-PSDrive ` + -Name "VEEAMSRC" ` + -PSProvider FileSystem ` + -Root $VeeamSource ` + -Credential $Credential ` + -ErrorAction Stop | Out-Null + + + + $VeeamSource = "VEEAMSRC:\" + + + Write-Host "" + Write-Host "Netzwerkquelle verbunden:" + Write-Host $VeeamSource + + } + + + default + { + + Write-Host "Ungültige Auswahl" + exit 1 + + } + +} + + + + +# Installer +$VeeamInstaller = ` +"$VeeamSource\Setup\Silent\Veeam.Silent.Install.exe" + + +# Antwortdatei +$AnswerFileSource = ` +"$VeeamSource\Setup\Silent\AnswerFiles\VBR\VbrAnswerFile_install.xml" + + + +# Arbeitsverzeichnis lokal +$WorkDir = "C:\Temp\VeeamInstall" + +$LogDir = "$WorkDir\Logs" + + + +# Lizenz +$LicenseSource = "$VeeamSource\License\veeam.lic" + +$LicenseTarget = "$WorkDir\veeam.lic" + + + +# Servername +$VeeamServerName = $env:COMPUTERNAME + + + +# SQL Server +$SQLServerName = $VeeamServerName + +$SQLInstanceName = "VEEAMSQLSERVER" + + +$SQLConnection = ` +"$SQLServerName\$SQLInstanceName" + + + +# SQL Datenbank +$DatabaseName = "VeeamBackup" + + +# 0 = Windows Authentication +$SQLAuthentication = 0 + + + +# Installationspfade + +$InstallPath = "F:\Program Files\Veeam\Backup and Replication" + + +$CatalogPath = "H:\VBRCatalog" + + +$IRCachePath = "F:\ProgramData\Veeam\Backup\IRCache" + + + +# Ports + +$GuestCatalogPort = 9393 + +$VeeamServicePort = 9392 + +$SecureConnectionPort = 9401 + +$RestServicePort = 9419 + + + +# Plugins deaktivieren + +$Plugins = @{ + "AHV_INSTALL" = 0 + "KVM_INSTALL" = 0 + "PVE_INSTALL" = 0 + "SCP_INSTALL" = 0 + "AWS_INSTALL" = 0 + "AZURE_INSTALL" = 0 + "GCP_INSTALL" = 0 + "KASTEN_INSTALL" = 0 +} + + + +# Neustart nicht automatisch + +$RebootRequired = 0 + + + +############################################################ +# FUNKTIONEN +############################################################ + +function Write-Log { + + param( + [string]$Message + ) + + $Time = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + + "$Time - $Message" | + Tee-Object ` + -FilePath "$LogDir\Install.log" ` + -Append + +} + + + +############################################################ +# START +############################################################ + + +############################################################ +# Verzeichnisse +############################################################ + +New-Item ` +$WorkDir ` +-ItemType Directory ` +-Force | Out-Null + + +New-Item ` +$LogDir ` +-ItemType Directory ` +-Force | Out-Null + + + +Write-Log "==== Veeam v13 Installation gestartet ====" + + + +############################################################ +# Quelle prüfen +############################################################ + +if (!(Test-Path $VeeamInstaller)) { + + Write-Log "FEHLER: Installer nicht gefunden" + + exit 1 +} + + +Write-Log "Installationsquelle OK" + + + +############################################################ +# LIZENZ PRÜFEN +############################################################ + +$UseLicenseFile = $false + + +if(Test-Path $LicenseSource) +{ + + Copy-Item ` + $LicenseSource ` + $LicenseTarget ` + -Force + + + $UseLicenseFile = $true + + Write-Log "Lizenzdatei gefunden: $LicenseTarget" + +} +else +{ + + Write-Log "Keine Lizenzdatei gefunden." + Write-Log "Installation wird als Community Edition durchgeführt." + +} +############################################################ +# Antwortdatei kopieren +############################################################ + +$AnswerFile = ` +"$WorkDir\VbrAnswerFile_install.xml" + + + +if(Test-Path $AnswerFile) +{ + attrib -R $AnswerFile + icacls $AnswerFile /grant Administrators:F /T | Out-Null + Write-Log "Antwortdatei Schreibrechte gesetzt" +} + + + +Copy-Item ` +$AnswerFileSource ` +$AnswerFile ` +-Force + + + +############################################################ +# XML bearbeiten +############################################################ + +Write-Log "Passe Antwortdatei an" + + + +[xml]$XML = Get-Content $AnswerFile + + + +foreach($Property in ` +$XML.unattendedInstallationConfiguration.properties.property) +{ + + +switch($Property.name) +{ + +"ACCEPT_EULA" +{ +$Property.value="1" +} + + +"ACCEPT_LICENSING_POLICY" +{ +$Property.value="1" +} + + +"ACCEPT_THIRDPARTY_LICENSES" +{ +$Property.value="1" +} + + +"ACCEPT_REQUIRED_SOFTWARE" +{ +$Property.value="1" +} + + + +"VBR_LICENSE_FILE" +{ + if($UseLicenseFile) + { + $Property.value=$LicenseTarget + } + else + { + $Property.value="0" + } +} + + + +"VBR_SQLSERVER_INSTALL" +{ +$Property.value="0" +} + + + +"VBR_SQLSERVER_ENGINE" +{ +$Property.value="0" +} + + + +"VBR_SQLSERVER_SERVER" +{ +$Property.value=$SQLConnection +} + + + +"VBR_SQLSERVER_DATABASE" +{ +$Property.value=$DatabaseName +} + + + +"VBR_SQLSERVER_AUTHENTICATION" +{ +$Property.value="$SQLAuthentication" +} + + + +"VBR_ENTRAID_DATABASE_INSTALL" +{ +$Property.value="0" +} + + + +"INSTALLDIR" +{ +$Property.value=$InstallPath +} + + + +"VM_CATALOGPATH" +{ +$Property.value=$CatalogPath +} + + + +"VBR_IRCACHE" +{ +$Property.value=$IRCachePath +} + + + +"VBRC_SERVICE_PORT" +{ +$Property.value="$GuestCatalogPort" +} + + + +"VBR_SERVICE_PORT" +{ +$Property.value="$VeeamServicePort" +} + + + +"VBR_SECURE_CONNECTIONS_PORT" +{ +$Property.value="$SecureConnectionPort" +} + + + +"VBR_RESTSERVICE_PORT" +{ +$Property.value="$RestServicePort" +} + + + +"REBOOT_IF_REQUIRED" +{ +$Property.value="$RebootRequired" +} + + + +default +{ + if($Plugins.ContainsKey($Property.name)) + { + $Property.value="$($Plugins[$Property.name])" + } +} + +} + + +} + +if(!(Test-Path $AnswerFile)) +{ + Write-Log "FEHLER: Antwortdatei existiert nicht" + exit 1 +} + + +if(!(Get-Item $AnswerFile).IsReadOnly -eq $false) +{ + Write-Log "FEHLER: Antwortdatei ist schreibgeschützt" + exit 1 +} + + +Write-Log "Speichere angepasste Antwortdatei" + +$XML.Save($AnswerFile) + +Write-Log "Antwortdatei erfolgreich gespeichert" + + +$XML.Save($AnswerFile) + + + +############################################################ +# Installation +############################################################ + +Write-Log "Starte Veeam Installation" + + + +$Arguments = @( +"/AnswerFile" +"`"$AnswerFile`"" +"/SkipNetworkLogonErrors" +) + + + +$Process = Start-Process ` +-FilePath $VeeamInstaller ` +-ArgumentList $Arguments ` +-Wait ` +-PassThru + + + +############################################################ +# Ergebnis +############################################################ + +Write-Log ` +"Installer ExitCode: $($Process.ExitCode)" + + + +switch($Process.ExitCode) +{ + + +0 +{ + +Write-Log ` +"Installation erfolgreich" + +} + + + +3010 +{ + +Write-Log ` +"Installation erfolgreich - Neustart erforderlich" + +} + + + +default +{ + +Write-Log ` +"Installation FEHLGESCHLAGEN" + +exit $Process.ExitCode + +} + + +} + + + +Write-Log ` +"==== Veeam Installation beendet ====" + + + +Write-Host "" +Write-Host "Installation abgeschlossen." +Write-Host "Log:" +Write-Host "$LogDir\Install.log" diff --git a/SCRIPTE-VEEAM/VEEAM-MSSQL_v.1.2.ps1 b/SCRIPTE-VEEAM/VEEAM-MSSQL_v.1.2.ps1 new file mode 100755 index 0000000..7db2464 --- /dev/null +++ b/SCRIPTE-VEEAM/VEEAM-MSSQL_v.1.2.ps1 @@ -0,0 +1,1022 @@ +#Requires -RunAsAdministrator + +<# +.SYNOPSIS + Unattended Installation Veeam Backup & Replication v13 + mit vorhandener Microsoft SQL Server Instanz + +.DESCRIPTION + Installation über DVD/ISO oder Netzwerkquelle + Verwendung einer vorhandenen MSSQL Instanz + + Datenbank: + SERVER\VEEAMSQLSERVER + + Version: + 1.2 +#> + + +############################################################ +# GLOBAL SETTINGS +############################################################ + +$ErrorActionPreference = "Stop" +Set-StrictMode -Version Latest + + + +############################################################ +# VARIABLEN +############################################################ + +# Installationsquellen + +$DVDSource = "E:\" + +$NetworkSource = "\\172.68.1.1\Sources" + + + +# Arbeitsverzeichnis + +$WorkDir = "C:\Temp\VeeamInstall" + +$LogDir = "$WorkDir\Logs" + + + +# Antwortdatei + +$AnswerFileName = "VbrAnswerFile_install.xml" + +$AnswerFile = "$WorkDir\$AnswerFileName" + + + +# Lizenz + +$LicenseSource = "$($DVDSource)\License\veeam.lic" + +$LicenseTarget = "$WorkDir\veeam.lic" + + + +# Server + +$VeeamServerName = $env:COMPUTERNAME + + + +# SQL + +$SQLInstanceName = "VEEAMSQLSERVER" + +$SQLConnection = "$VeeamServerName\$SQLInstanceName" + +$DatabaseName = "VeeamBackup" + +$SQLAuthentication = 0 + + + +# Pfade + +$InstallPath = "F:\Program Files\Veeam\Backup and Replication" + +$CatalogPath = "H:\VBRCatalog" + +$IRCachePath = "F:\ProgramData\Veeam\Backup\IRCache" + + + +# Ports + +$GuestCatalogPort = 9393 + +$VeeamServicePort = 9392 + +$SecureConnectionPort = 9401 + +$RestServicePort = 9419 + + + +# Neustart + +$RebootRequired = 0 + + + +# Plugins + +$Plugins = @{ + + "AHV_INSTALL" = 0 + "KVM_INSTALL" = 0 + "PVE_INSTALL" = 0 + "SCP_INSTALL" = 0 + "AWS_INSTALL" = 0 + "AZURE_INSTALL" = 0 + "GCP_INSTALL" = 0 + "KASTEN_INSTALL" = 0 + +} + + + +# Wird später gesetzt + +$VeeamSource = "" + +$VeeamInstaller = "" + +$AnswerFileSource = "" + +$UseLicenseFile = $false + + + +############################################################ +# FUNKTIONEN +############################################################ + + +function Write-Log { + + param( + [Parameter(Mandatory)] + [string] + $Message + ) + + + $Time = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + + $Entry = "$Time - $Message" + + + Write-Host $Entry + + + if(Test-Path $LogDir) + { + + Add-Content ` + -Path "$LogDir\Install.log" ` + -Value $Entry + + } + +} + + + +function Initialize-Directories { + + + Write-Log "Erstelle Arbeitsverzeichnisse" + + + foreach($Path in @( + $WorkDir, + $LogDir + )) + { + + if(!(Test-Path $Path)) + { + + New-Item ` + -Path $Path ` + -ItemType Directory ` + -Force | Out-Null + + } + + } + + +} + + + +function Remove-OldInstallFiles { + + + if(Test-Path $WorkDir) + { + + try + { + + Remove-Item ` + -Path $WorkDir ` + -Recurse ` + -Force ` + -ErrorAction Stop + + + Write-Host "Alte VeeamInstall-Dateien entfernt." + + } + catch + { + + Write-Host "Fehler beim Löschen: $($_.Exception.Message)" + + exit 1 + + } + + } + +} + + + +function Select-VeeamSource { + + + Write-Host "" + + Write-Host "Veeam Installationsquelle" + + Write-Host "=========================" + + Write-Host "1 = DVD / ISO Quelle ($DVDSource)" + + Write-Host "2 = Netzwerkquelle ($NetworkSource)" + + Write-Host "" + + + $Choice = Read-Host "Quelle auswählen (1 oder 2)" + + + + switch($Choice) + { + + "1" + { + + $script:VeeamSource = $DVDSource + + + Write-Host "" + + Write-Host "Lokale Quelle gewählt:" + + Write-Host $VeeamSource + + } + + + "2" + { + + Write-Host "" + + Write-Host "Netzwerkquelle wird verwendet" + + + $Credential = Get-Credential + + + + New-PSDrive ` + -Name "VEEAMSRC" ` + -PSProvider FileSystem ` + -Root $NetworkSource ` + -Credential $Credential ` + -ErrorAction Stop | Out-Null + + + + $script:VeeamSource = $NetworkSource + + + + Write-Host "" + + Write-Host "Netzwerkquelle verbunden:" + + Write-Host $VeeamSource + + } + + + default + { + + Write-Host "Ungültige Auswahl" + + exit 1 + + } + + } + + + + $script:VeeamInstaller = + "$VeeamSource\Setup\Silent\Veeam.Silent.Install.exe" + + + + $script:AnswerFileSource = + "$VeeamSource\Setup\Silent\AnswerFiles\VBR\VbrAnswerFile_install.xml" + + +} + + + +function Test-VeeamSource { + + + Write-Log "Prüfe Installationsquelle" + + + if(!(Test-Path $VeeamInstaller)) + { + + Write-Log "FEHLER: Installer nicht gefunden" + + exit 1 + + } + + + if(!(Test-Path $AnswerFileSource)) + { + + Write-Log "FEHLER: Antwortdatei nicht gefunden" + + exit 1 + + } + + + Write-Log "Installationsquelle OK" + + +} +############################################################ +# LIZENZ +############################################################ + + +function Copy-VeeamLicense { + + + Write-Log "Prüfe Lizenzdatei" + + + $Source = "$VeeamSource\License\veeam.lic" + + + + if(Test-Path $Source) + { + + Copy-Item ` + -Path $Source ` + -Destination $LicenseTarget ` + -Force ` + -ErrorAction Stop + + + $script:UseLicenseFile = $true + + + Write-Log "Lizenzdatei kopiert: $LicenseTarget" + + } + else + { + + $script:UseLicenseFile = $false + + + Write-Log "Keine Lizenzdatei gefunden" + + Write-Log "Installation als Community Edition" + + } + + +} + + + +############################################################ +# ANTWORTDATEI +############################################################ + + +function Prepare-AnswerFile { + + + Write-Log "Kopiere Antwortdatei" + + + + Copy-Item ` + -Path $AnswerFileSource ` + -Destination $AnswerFile ` + -Force ` + -ErrorAction Stop + + + + if(!(Test-Path $AnswerFile)) + { + + Write-Log "FEHLER: Antwortdatei nicht vorhanden" + + exit 1 + + } + + + + # + # Blockierung durch Windows entfernen + # + + Unblock-File ` + -Path $AnswerFile ` + -ErrorAction SilentlyContinue + + + + # + # Attribute entfernen + # + + attrib -R $AnswerFile + + attrib -S $AnswerFile + + attrib -H $AnswerFile + + + + # + # Rechte setzen + # + + icacls ` + $AnswerFile ` + /grant Administrators:F ` + /grant SYSTEM:F ` + | Out-Null + + + + Write-Log "Antwortdatei vorbereitet" + + +} + + + +############################################################ +# XML ÄNDERN +############################################################ + + +function Update-AnswerFile { + + + Write-Log "Bearbeite Antwortdatei" + + + + try + { + + [xml]$XML = Get-Content ` + -Path $AnswerFile ` + -Encoding UTF8 + + } + catch + { + + Write-Log "XML Fehler: $($_.Exception.Message)" + + exit 1 + + } + + + + foreach($Property in $XML.unattendedInstallationConfiguration.properties.property) + { + + + switch($Property.name) + { + + + "ACCEPT_EULA" + { + $Property.value = "1" + } + + + + "ACCEPT_LICENSING_POLICY" + { + $Property.value = "1" + } + + + + "ACCEPT_THIRDPARTY_LICENSES" + { + $Property.value = "1" + } + + + + "ACCEPT_REQUIRED_SOFTWARE" + { + $Property.value = "1" + } + + + + "VBR_LICENSE_FILE" + { + + if($UseLicenseFile) + { + + $Property.value = $LicenseTarget + + } + else + { + + $Property.value = "0" + + } + + } + + + + "VBR_SQLSERVER_INSTALL" + { + $Property.value = "0" + } + + + + "VBR_SQLSERVER_ENGINE" + { + $Property.value = "0" + } + + + + "VBR_SQLSERVER_SERVER" + { + $Property.value = $SQLConnection + } + + + + "VBR_SQLSERVER_DATABASE" + { + $Property.value = $DatabaseName + } + + + + "VBR_SQLSERVER_AUTHENTICATION" + { + $Property.value = "$SQLAuthentication" + } + + + + "VBR_ENTRAID_DATABASE_INSTALL" + { + $Property.value = "0" + } + + + + "INSTALLDIR" + { + $Property.value = $InstallPath + } + + + + "VM_CATALOGPATH" + { + $Property.value = $CatalogPath + } + + + + "VBR_IRCACHE" + { + $Property.value = $IRCachePath + } + + + + "VBRC_SERVICE_PORT" + { + $Property.value = "$GuestCatalogPort" + } + + + + "VBR_SERVICE_PORT" + { + $Property.value = "$VeeamServicePort" + } + + + + "VBR_SECURE_CONNECTIONS_PORT" + { + $Property.value = "$SecureConnectionPort" + } + + + + "VBR_RESTSERVICE_PORT" + { + $Property.value = "$RestServicePort" + } + + + + "REBOOT_IF_REQUIRED" + { + $Property.value = "$RebootRequired" + } + + + + default + { + + if($Plugins.ContainsKey($Property.name)) + { + + $Property.value = + "$($Plugins[$Property.name])" + + } + + } + + } + + + } + + + + # + # XML speichern + # + + try + { + + attrib -R $AnswerFile + + + $XML.Save($AnswerFile) + + + + Write-Log "Antwortdatei gespeichert" + + + } + catch + { + + Write-Log ` + "FEHLER beim Speichern XML: $($_.Exception.Message)" + + + exit 1 + + } + + +} + + + +############################################################ +# INSTALLATIONSPFADE +############################################################ + + +function Test-RequiredPaths { + + + Write-Log "Prüfe Installationspfade" + + + + foreach($Path in @( + $InstallPath, + $CatalogPath, + $IRCachePath + )) + { + + + if(!(Test-Path $Path)) + { + + try + { + + New-Item ` + -Path $Path ` + -ItemType Directory ` + -Force ` + -ErrorAction Stop | Out-Null + + + Write-Log "Pfad erstellt: $Path" + + + } + catch + { + + Write-Log ` + "FEHLER Pfad $Path : $($_.Exception.Message)" + + + exit 1 + + } + + + } + else + { + + Write-Log "Pfad vorhanden: $Path" + + } + + + } + + + +} +############################################################ +# VEEAM INSTALLATION +############################################################ + + +function Install-Veeam { + + + Write-Log "Starte Veeam Installation" + + + + $Arguments = @( + "/AnswerFile" + "`"$AnswerFile`"" + "/SkipNetworkLogonErrors" + ) + + + + try + { + + $Process = Start-Process ` + -FilePath $VeeamInstaller ` + -ArgumentList $Arguments ` + -Wait ` + -PassThru ` + -ErrorAction Stop + + + } + catch + { + + Write-Log ` + "FEHLER beim Start des Installers: $($_.Exception.Message)" + + + exit 1 + + } + + + + Write-Log ` + "Installer ExitCode: $($Process.ExitCode)" + + + + switch($Process.ExitCode) + { + + + 0 + { + + Write-Log "Installation erfolgreich" + + } + + + + 3010 + { + + Write-Log ` + "Installation erfolgreich - Neustart erforderlich" + + } + + + + 1603 + { + + Write-Log ` + "FEHLER 1603 - MSI Installationsfehler" + + + exit 1603 + + } + + + + default + { + + Write-Log ` + "Installation fehlgeschlagen" + + + exit $Process.ExitCode + + } + + + } + + +} + + + +############################################################ +# INSTALLATIONSERGEBNIS +############################################################ + + +function Show-Result { + + + Write-Host "" + + Write-Host "=================================" + + Write-Host "Veeam Installation abgeschlossen" + + Write-Host "=================================" + + Write-Host "" + + Write-Host "Logdatei:" + + Write-Host "$LogDir\Install.log" + + Write-Host "" + + +} + + + +############################################################ +# MAIN +############################################################ + + +function Main { + + + # + # Alte Daten entfernen + # + + Remove-OldInstallFiles + + + + # + # Arbeitsverzeichnis erstellen + # + + Initialize-Directories + + + + Write-Log ` + "==== Veeam Backup & Replication v13 Installation gestartet ====" + + + + # + # Quelle wählen + # + + Select-VeeamSource + + + + # + # Quelle prüfen + # + + Test-VeeamSource + + + + # + # Lizenz + # + + Copy-VeeamLicense + + + + # + # Antwortdatei + # + + Prepare-AnswerFile + + + + Update-AnswerFile + + + + # + # Zielpfade + # + + Test-RequiredPaths + + + + # + # Installation + # + + Install-Veeam + + + + Write-Log ` + "==== Veeam Installation beendet ====" + + + + Show-Result + + +} + + + +############################################################ +# START +############################################################ + +Main + + + diff --git a/SCRIPTE_ALT/full_import_ALL_cert.sh b/SCRIPTE_ALT/full_import_ALL_cert.sh new file mode 100755 index 0000000..fef2807 --- /dev/null +++ b/SCRIPTE_ALT/full_import_ALL_cert.sh @@ -0,0 +1,541 @@ +#!/bin/bash +# Variablen +# Konfiguration für den Zugriff auf die Synology DiskStation +SYNOLOGY_HOST="9.99.50.10" +SYNOLOGY_USERNAME="Madzone" +SYNOLOGY_PASSWORD="P@ssw0rd" +SSH_PRIVATE_KEY="$HOME/.ssh/id_rsa_synology" +host=$(nslookup 9.99.50.10) +# Zielpfad für das Full-Chain-Zertifikat +FULLCHAIN_CERT="fullchain.${HOST_FQDN}.crt" +HOST_FQDN=$(hostname -f) +HOST_NORMAL=$(hostname -s) +DOMAIN=$(hostname -d) +REMOTE_DIR="/volume1/HEIMLAN/HEIMLAN" +NFS_MOUNT="/mnt/CSR" +SSH_PRIVATE_KEY="$HOME/.ssh/id_rsa_synology" +TMP="/tmp" + +# Name der Zertifikatsdateien +ROOT_CERT="CERT_HEIMLAN_RootCA.crt" +SUBCA_CERT="CERT_HEIMLAN_SubCA.crt" +SERVER_CERT="CERT_${HOST_FQDN}.crt" + +# Globale Variablen für das Betriebssystem +OS="" +distro="" +version="" +codename="" + +# Globale Variablen für OPENSSL +CSR_DIR="/tmp" +KEY_DIR="/tmp" +SSL_DIR="" +PKI_DIR="" + +# Extrahiere OU (Organizational Unit) und O (Organization) und wandele sie in Großbuchstaben um +OU=$(echo "${DOMAIN%%.*}" | tr '[:lower:]' '[:upper:]') +O=$(echo "${DOMAIN#*.}" | tr '[:lower:]' '[:upper:]') + +# Read IP address dynamically from active network interface +IP_ADDRESS=$(nmcli -t -f IP4.ADDRESS device show | awk -F: '{split($2,a,"/"); print a[1]; exit}') +echo "IP Address: $IP_ADDRESS" + +# GLobale SSH Variablen +KEY_PATH="$HOME/.ssh/id_rsa_synology" # Pfad zum SSH-Schlüssel +NAS_HOME="/var/services/homes/$SYNOLOGY_USERNAME" # Angepasstes Home-Verzeichnis auf der NAS +dnf install sshpass nfs-utils -y + +#********************************************************************* +#echo "SSH KEY wird im System implemntiert..." +#sudo ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_synology +#echo "SSH KEY wurde Erfolgreich im System implemntiert" +#echo "SSH Verbindung wird in die .ssh eingetragen...." +#sudo ssh-copy-id -i ~/.ssh/id_rsa_synology.pub ${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}${SYNOLOGY_PASSWORD} +#echo "SSH Verbindung wurde Erfolgreich in die .ssh eingetragen !!!" + + +colourmsg(){ + echo -e "\033[0;36m$1\033[0m" +} +# Funktion zum Erstellen eines Ordners mit Unterordnern über SSH mit sshpass +create_remote_folders() { + + # SSH-Befehl zum Erstellen des Ordners mit Unterordnern mit sshpass + echo sshpass -p $SYNOLOGY_PASSWORD ssh "${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}" "mkdir -p ${REMOTE_DIR}/${HOST_FQDN}/CSR" + sshpass -p $SYNOLOGY_PASSWORD ssh "${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}" "mkdir -p ${REMOTE_DIR}/${HOST_FQDN}/CSR" + echo sshpass -p $SYNOLOGY_PASSWORD ssh "${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}" "mkdir -p ${REMOTE_DIR}/${HOST_FQDN}/CERT" + sshpass -p $SYNOLOGY_PASSWORD ssh "${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}" "mkdir -p ${REMOTE_DIR}/${HOST_FQDN}/CERT" + echo sshpass -p $SYNOLOGY_PASSWORD ssh "${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}" "mkdir -p ${REMOTE_DIR}/${HOST_FQDN}/KEY" + sshpass -p $SYNOLOGY_PASSWORD ssh "${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}" "mkdir -p ${REMOTE_DIR}/${HOST_FQDN}/KEY" + echo "Ordner ${REMOTE_DIR}/$HOST_FQDN/ wurde auf ${host} erstellt." +} + +# Funktion zum Erstellen von SSH-Schlüsseln +generate_ssh_key() { + if [ ! -f "$KEY_PATH" ]; then + echo "Erstelle SSH-Schlüssel..." + ssh-keygen -t rsa -b 4096 -N "" -f "$KEY_PATH" + else + echo "SSH-Schlüssel existieren bereits." + fi +} + +# Funktion zum Kopieren des öffentlichen Schlüssels zur NAS +copy_ssh_key_to_nas() { + echo "Kopiere den öffentlichen Schlüssel zur NAS..." + #cat ${KEY_PATH}.pub | ssh -o StrictHostKeyChecking=no $SYNOLOGY_USERNAME@$SYNOLOGY_HOST "tee -a $NAS_HOME/.ssh/authorized_keys && chmod 600 $NAS_HOME/.ssh/authorized_keys" + cat ${KEY_PATH}.pub | sshpass -p "$SYNOLOGY_PASSWORD" ssh -o StrictHostKeyChecking=no $SYNOLOGY_USERNAME@$SYNOLOGY_HOST "tee -a $NAS_HOME/.ssh/authorized_keys && chmod 600 $NAS_HOME/.ssh/authorized_keys" + if [ $? -eq 0 ]; then + echo "Öffentlicher Schlüssel erfolgreich zur NAS kopiert." + else + echo "Fehler beim Kopieren des öffentlichen Schlüssels zur NAS." + exit 1 + fi +} + +# Funktion zum Kopieren der Datei von der NAS zum lokalen Rechner +copy_file_from_nas() { + echo "Kopiere die Datei von der NAS zum lokalen Rechner..." + scp -i "$KEY_PATH" $SYNOLOGY_USERNAME@SYNOLOGY_HOST:$NAS_HOME "$KEY_PATH" + + if [ $? -eq 0 ]; then + echo "Datei erfolgreich kopiert." + else + echo "Fehler beim Kopieren der Datei." + exit 1 + fi +} +# Funktion zum Ermitteln des Betriebssystems +detect_os() { + echo "Das installierte Derivat wird ermittelt...." + OS=$(uname -s) + + case $OS in + Linux*) + # Überprüfen, ob lsb_release verfügbar ist + if command -v lsb_release &> /dev/null; then + # Verwende lsb_release, wenn es verfügbar ist + distro=$(lsb_release -si) + version=$(lsb_release -sr) + codename=$(lsb_release -sc) + else + # Überprüfe /etc/os-release + if [ -f /etc/os-release ]; then + . /etc/os-release + distro=$NAME + version=$VERSION_ID + codename=$VERSION_CODENAME + # Überprüfe /etc/lsb-release + elif [ -f /etc/lsb-release ]; then + . /etc/lsb-release + distro=$DISTRIB_ID + version=$DISTRIB_RELEASE + codename=$DISTRIB_CODENAME + # Überprüfe /etc/debian_version + elif [ -f /etc/debian_version ]; then + distro="Debian" + version=$(cat /etc/debian_version) + codename=$(uname -r) + # Überprüfe /etc/redhat-release + elif [ -f /etc/redhat-release ]; then + distro=$(cat /etc/redhat-release) + version=$(uname -r) + codename=$(uname -r) + else + distro="Unbekannte Distribution" + version="Unbekannte Version" + codename="Unbekannter Codename" + fi + fi + # Ausgabe der ermittelten Informationen + echo "\n\n" + echo "Distribution: $distro" + echo "Version: $version" + echo "Codename: $codename" + echo "\n\n" + ;; + *) + echo "Unsupported OS: $OS" + exit 1 + ;; + esac + + echo "${distro} wurde ....... Ausgewählt......." +} +install_requierments(){ + echo "Erstellen des Zertifikatsrequests..." + echo " Funktion create_certificate_request() wert der Variable distro: $distro" + case $distro in + Debian|Ubuntu) + echo "" Alle Noetigen Kompomenten werden Installiert.... + apt install sudo sshpass nfs-common -y + ;; + CentOS) + echo "" Alle Noetigen Kompomenten werden Installiert.... + dnf install sudo sshpass nfs-utils -y + ;; + "Red Hat Enterprise Linux") + echo "" Alle Noetigen Kompomenten werden Installiert.... + dnf install sudo sshpass nfs-utils -y + ;; + *) + echo "Das Betriebssystem wird nicht unterstützt für Zertifikatsrequest.";; + esac +} +# Funktion zum Erstellen des Zertifikatsrequests +create_certificate_request() { + echo "Erstellen des Zertifikatsrequests..." + echo " Funktion create_certificate_request() wert der Variable distro: $distro" + case $distro in + Debian|Ubuntu) + apt install sudo sshpass nfs-common -y + # Debian / Ubuntu spezifische Pfade + #KEY_DIR="/etc/ssl/private/" + # Erstellen des privaten Schlüssels + openssl genrsa -out "${KEY_DIR}/KEY_${HOST_FQDN}.pem" 4096 + echo "Privater Schlüssel wurde erstellt: private.key" + # CSR erstellen + #CSR_DIR="/tmp" + openssl req -new -key "${KEY_DIR}/KEY_${HOST_FQDN}.pem" -out "${CSR_DIR}/CSR_${HOST_FQDN}.csr" -subj "/C=DE/ST=TH/L=ILM/O=${O}/OU=${OU}/CN=${HOST_FQDN}/emailAddress=admin@$DOMAIN" + echo "Zertifikatsrequest wurde erstellt: request.csr" + # CSR anzeigen + echo "Inhalt des erstellten Zertifikatsrequests: DEBIAN|UBUNTU......." + openssl req -in "${CSR_DIR}/CSR_${HOST_FQDN}.csr" -text -noout + ;; + CentOS) + # CentOS spezifische Pfade + #KEY_DIR="/etc/pki/tls/private/" + # Erstellen des privaten Schlüssels + openssl genrsa -out "${KEY_DIR}KEY_${HOST_FQDN}.pem" 4096 + echo "Privater Schlüssel wurde erstellt und gespeichert unter: ${KEY_DIR}KEY_${HOST_FQDN}.key" + # CSR erstellen + #CSR_DIR="/tmp" + openssl req -new -key "${KEY_DIR}/KEY_${HOST_FQDN}.pem" -out "${CSR_DIR}/CSR_${HOST_FQDN}.csr" -subj "/C=DE/ST=TH/L=ILM/O=HEIMLAN/OU=HEIMLAN/CN=${HOST_FQDN}/emailAddress=admin@$DOMAIN" + echo "Zertifikatsrequest wurde erstellt und gespeichert unter: ${CSR_DIR}/CSR_${HOST_FQDN}.csr" + # CSR anzeigen + echo "Inhalt des erstellten Zertifikatsrequests: CENTOS....." + openssl req -in "${CSR_DIR}/CSR_${HOST_FQDN}.csr" -text -noout + ;; + "Red Hat Enterprise Linux") + # CentOS spezifische Pfade + #KEY_DIR="/etc/pki/tls/private/" + # Erstellen des privaten Schlüssels + openssl genrsa -out "${KEY_DIR}/KEY_${HOST_FQDN}.pem" 4096 + echo "Privater Schlüssel wurde erstellt und gespeichert unter: ${KEY_DIR}KEY_${HOST_FQDN}.key" + # CSR erstellen + #CSR_DIR="/tmp" + openssl req -new -key "${KEY_DIR}/KEY_${HOST_FQDN}.pem" -out "${CSR_DIR}/CSR_${HOST_FQDN}.csr" -subj "/C=DE/ST=TH/L=ILM/O=HEIMLAN/OU=HEIMLAN/CN=${HOST_FQDN}/emailAddress=admin@$DOMAIN" + echo "Zertifikatsrequest wurde erstellt und gespeichert unter: ${CSR_DIR}/CSR_${HOST_FQDN}.csr" + # CSR anzeigen + echo "Inhalt des erstellten Zertifikatsrequests: RHEL ....." + openssl req -in "${CSR_DIR}/CSR_${HOST_FQDN}.csr" -text -noout + ;; + *) + echo "Das Betriebssystem wird nicht unterstützt für Zertifikatsrequest.";; + esac +} + +# Funktion zum Erstellen des SSH-Schlüsselpaars und Hinzufügen zur Synology +setup_ssh_keys() { + echo "=== Einrichten von SSH-Schlüsseln ===" + + # Überprüfen, ob der private Schlüssel bereits vorhanden ist + if [ ! -f "${SSH_PRIVATE_KEY}" ]; then + echo "Erstelle SSH-Schlüsselpaar..." + ssh-keygen -t rsa -b 4096 -f "${SSH_PRIVATE_KEY}" -N "" -C "Synology SSH key" + echo "SSH-Schlüsselpaar wurde erstellt: ${SSH_PRIVATE_KEY}" + else + echo "SSH-Schlüsselpaar ist bereits vorhanden: ${SSH_PRIVATE_KEY}" + fi + + # SSH-Schlüssel zur Synology hinzufügen + echo "Füge den öffentlichen Schlüssel zur Synology hinzu..." + ssh-copy-id -i "${SSH_PRIVATE_KEY}.pub" "${SYNOLOGY_USER}@${SYNOLOGY_HOST}" + echo "Öffentlicher Schlüssel wurde zur Synology hinzugefügt." +} + +# Funktion zum Hochladen des Requests zur Synology +upload_certificate_request() { + echo "Hochladen des Zertifikatsrequests zur Synology..." + # Mounten der NFS-Freigabe mit Benutzername und Passwort + sudo mkdir -p ${NFS_MOUNT} + echo "sudo mkdir $NFS_MOUNT" + #sudo mkdir -p ${NFS_MOUNT} + #sleep 10 + #ls /mnt/CSR/ + #sudo mount -t nfs -o username="${SYNOLOGY_USER}",password="${SYNOLOGY_PASSWORD}" "${SYNOLOGY_HOST}:${REMOTE_DIR}/$HOST_NORMAL/CSR" "${NFS_MOUNT}" + sudo mount -t nfs -o nfsvers=3 "${SYNOLOGY_HOST}:${REMOTE_DIR}" "${NFS_MOUNT}" + ls -lha /mnt/CSR/ + #echo "TEST WARTE ZEIT 30 SEKUNDEN......" + #sleep 30 + # Überprüfen, ob das Mount erfolgreich war + if [ $? -eq 0 ]; then + echo "NFS-Freigabe erfolgreich eingebunden: ${NFS_MOUNT}" + # Kopieren der Datei auf die NFS-Freigabe + ls -lha /mnt/CSR/ + sleep 5 + sudo cp "${CSR_DIR}/CSR_${HOST_FQDN}.csr" "${NFS_MOUNT}/${HOST_FQDN}/CSR/" + sudo cp "${KEY_DIR}/KEY_${HOST_FQDN}.pem" "${NFS_MOUNT}/${HOST_FQDN}/KEY/" + sleep 5 + ls -lha /mnt/CSR/ + echo "Datei erfolgreich auf die NFS-Freigabe hochgeladen." + #echo "2. TEST WARTE ZEIT 30 SEKUNDEN......" + #sleep 30 + else + echo "Fehler beim Einbinden der NFS-Freigabe: ${NFS_MOUNT}" + fi + echo "Zertifikatsrequest wurde zur Synology hochgeladen." +} +umountNFS(){ + # NFS-Freigabe wieder aushängen + sudo umount "${NFS_MOUNT}" + cd /mnt + rmdir CSR/ + echo "NFS-Freigabe erfolgreich ausgehängt." +} +# Funktion zum Herunterladen von Root-Zertifikat, Sub-CA-Zertifikat und Server-Zertifikat +download_certificates() { + echo "Herunterladen von Root-Zertifikat, Sub-CA-Zertifikat und Server-Zertifikat..." + echo "=== Überprüfen und Herunterladen der Datei von der Synology ===" + + # SSH-Befehl, um die Existenz der Datei auf der Synology zu überprüfen + ssh -i "$KEY_PATH" "${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}" test -f "${REMOTE_DIR}/${HOST_FQDN}/CERT/$SERVER_CERT" + + # Prüfen des Rückgabewerts von test (-f) und Entscheidung treffen + if [ $? -eq 0 ]; then + echo "Datei CERT_${HOST_FQDN}.crt auf der Synology gefunden. Beginne mit dem Download..." + cp "${NFS_MOUNT}/${HOST_FQDN}/CERT/$SERVER_CERT" "${TMP}/$SERVER_CERT" + cp "${NFS_MOUNT}/RootCA/$ROOT_CERT" "${TMP}/$ROOT_CERT" + cp "${NFS_MOUNT}/SubCA/$SUBCA_CERT" "${TMP}/$SUBCA_CERT" + echo "Datei erfolgreich heruntergeladen nach ${TMP}" + else + #echo "Datei $SERVER_CERT nicht auf der Synology gefunden. Warte 300 Sekunden..." + #sleep 300 + echo "Datei $SERVER_CERT nicht auf der Synology gefunden. Warte 300 Sekunden..." + + # Timer mit Countdown anzeigen + for ((i=300; i>0; i--)); do + echo -ne "Noch $i Sekunden warten...\r" + sleep 1 + done + echo + download_certificates # Rekursiver Aufruf, um erneut zu prüfen + fi + echo "Zertifikate wurden heruntergeladen." +} + +# Funktion zum Erstellen des Full-Chain-Zertifikats und Umbenennen +create_fullchain_certificate() { + echo "Erstellen des Full-Chain-Zertifikats..." + # Zielpfad für das Full-Chain-Zertifikat + FULLCHAIN_CERT="/tmp/fullchain.crt" + + # Full-Chain-Zertifikat erstellen + cat "$TMP/$SERVER_CERT" "$TMP/$SUBCA_CERT" "$TMP/$ROOT_CERT" > "$FULLCHAIN_CERT" + + echo "Full-Chain-Zertifikat wurde erstellt: $FULLCHAIN_CERT" + + # Server-Zertifikat nach Hostnamen benennen + HOSTNAME=$(hostname) + mv "$FULLCHAIN_CERT" "$TMP/fullchain_$HOST_FQDN.crt" + + echo "Full-Chain-Zertifikat umbenannt zu fullchain_$HOST_FQDN.crt" +} + +# Funktion zum Kopieren der Zertifikate in die richtigen Pfade je nach Derivat und Typ +copy_certificates() { + echo "Kopieren der Zertifikate in die richtigen Pfade..." + + case $distro in + Debian|Ubuntu) + # Debian / Ubuntu spezifische Pfade + SSL_DIR="/usr/local/share/ca-certificates/" + # Root-Zertifikat kopieren + cp "$TMP/$ROOT_CERT" "$SSL_DIR/$ROOT_CERT" + # Sub-CA-Zertifikat kopieren + cp "$TMP/$SUBCA_CERT" "$SSL_DIR/$SUBCA_CERT" + # Server-Zertifikat kopieren + cp "$TMP/$SERVER_CERT" "$SSL_DIR/$SERVER_CERT" + echo "Zertifikate wurden nach $SSL_DIR kopiert." + update-ca-certificates + ;; + CentOS|"Red Hat Enterprise Linux") + # CentOS spezifische Pfade + SSL_DIR="/etc/pki/tls/certs/" + PKI_DIR="/etc/pki/ca-trust/source/anchors/" + # Root-Zertifikat kopieren + cp "$TMP/$ROOT_CERT" "$SSL_DIR/$ROOT_CERT" + cp "$TMP/$ROOT_CERT" "$PKI_DIR/$ROOT_CERT" + # Sub-CA-Zertifikat kopieren + cp "$TMP/$SUBCA_CERT" "$SSL_DIR/$SUBCA_CERT" + cp "$TMP/$SUBCA_CERT" "$PKI_DIR/$SUBCA_CERT" + # Server-Zertifikat kopieren + cp "$TMP/$SERVER_CERT" "$SSL_DIR/$SERVER_CERT" + cp "$TMP/$SERVER_CERT" "$PKI_DIR/$SERVER_CERT" + echo "Zertifikate wurden nach $SSL_DIR und nach $PKI_DIR kopiert." + update-ca-trust + ;; + *) + echo "Das Betriebssystem $OS wird nicht unterstützt für Zertifikate-Kopieren." + ;; + esac +} + +# Funktion zum Kopieren der Zertifikate in die richtigen Pfade je nach WebServer Ty +copy_web_certificates() { + echo "Kopieren der Zertifikate in die richtigen Pfade und Aktualisieren der Konfigurationsdateien..." + + case $distro in + Debian|Ubuntu) + # Debian / Ubuntu spezifische Pfade + SSL_DIR_APACHE="/etc/ssl/certs/" + SSL_DIR_NGINX="/etc/nginx/ssl/" + + # Prüfen, ob Apache installiert ist und den SSL-Pfad anpassen + if [ -f "/etc/apache2/apache2.conf" ]; then + SSL_DIR_APACHE="/etc/apache2/ssl/" + fi + + # Prüfen, ob Nginx installiert ist und den SSL-Pfad anpassen + if [ -f "/etc/nginx/nginx.conf" ]; then + SSL_DIR_NGINX="/etc/nginx/ssl/" + fi + + # Root-Zertifikat kopieren + cp "$TMP/$ROOT_CERT" "$SSL_DIR_APACHE/$ROOT_CERT" + cp "$TMP/$ROOT_CERT" "$SSL_DIR_NGINX/$ROOT_CERT" + # Sub-CA-Zertifikat kopieren + cp "$TMP/$SUBCA_CERT" "$SSL_DIR_APACHE/$SUBCA_CERT" + cp "$TMP/$SUBCA_CERT" "$SSL_DIR_NGINX/$SUBCA_CERT" + # Server-Zertifikat kopieren + cp "$TMP/$SERVER_CERT" "$SSL_DIR_APACHE/$SERVER_CERT" + cp "$TMP/$SERVER_CERT" "$SSL_DIR_NGINX/$SERVER_CERT" + + echo "Zertifikate wurden nach $SSL_DIR_APACHE und $SSL_DIR_NGINX kopiert." + + # Aktualisieren der Apache-Konfiguration, falls vorhanden + if [ -f "/etc/apache2/apache2.conf" ]; then + update_apache_config "$SSL_DIR_APACHE/$SERVER_CERT" "$SSL_DIR_APACHE/$SERVER_KEY" + fi + + # Aktualisieren der Nginx-Konfiguration, falls vorhanden + if [ -f "/etc/nginx/nginx.conf" ]; then + update_nginx_config "$SSL_DIR_NGINX/$SERVER_CERT" "$SSL_DIR_NGINX/$SERVER_KEY" + fi + ;; + CentOS|"Red Hat Enterprise Linux") + # CentOS spezifische Pfade + SSL_DIR_APACHE="/etc/pki/tls/certs/" + SSL_DIR_NGINX="/etc/nginx/ssl/" + + # Prüfen, ob Apache installiert ist und den SSL-Pfad anpassen + if [ -f "/etc/httpd/conf/httpd.conf" ]; then + SSL_DIR_APACHE="/etc/httpd/ssl/" + fi + + # Prüfen, ob Nginx installiert ist und den SSL-Pfad anpassen + if [ -f "/etc/nginx/nginx.conf" ]; then + SSL_DIR_NGINX="/etc/nginx/ssl/" + fi + + # Root-Zertifikat kopieren + cp "$TMP/$ROOT_CERT" "$SSL_DIR_APACHE/$ROOT_CERT" + cp "$TMP/$ROOT_CERT" "$SSL_DIR_NGINX/$ROOT_CERT" + # Sub-CA-Zertifikat kopieren + cp "$TMP/$SUBCA_CERT" "$SSL_DIR_APACHE/$SUBCA_CERT" + cp "$TMP/$SUBCA_CERT" "$SSL_DIR_NGINX/$SUBCA_CERT" + # Server-Zertifikat kopieren + cp "$TMP/$SERVER_CERT" "$SSL_DIR_APACHE/$SERVER_CERT" + cp "$TMP/$SERVER_CERT" "$SSL_DIR_NGINX/$SERVER_CERT" + + echo "Zertifikate wurden nach $SSL_DIR_APACHE und $SSL_DIR_NGINX kopiert." + + # Aktualisieren der Apache-Konfiguration, falls vorhanden + if [ -f "/etc/httpd/conf/httpd.conf" ]; then + update_apache_config "$SSL_DIR_APACHE/$SERVER_CERT" "$SSL_DIR_APACHE/$SERVER_KEY" + fi + + # Aktualisieren der Nginx-Konfiguration, falls vorhanden + if [ -f "/etc/nginx/nginx.conf" ]; then + update_nginx_config "$SSL_DIR_NGINX/$SERVER_CERT" "$SSL_DIR_NGINX/$SERVER_KEY" + fi + ;; + *) + echo "Es ist kein WEbServer auf diesen System Installiert" + ;; + esac +} + +# Funktion zum Aktualisieren der Apache-Konfiguration +update_apache_config() { + local cert_file="$1" + local key_file="$2" + + echo "Aktualisiere Apache-Konfiguration für SSL-Zertifikate..." + + # Konfigurationsdatei für SSL-Zertifikate finden und bearbeiten + local apache_config_file=$(find /etc/apache2 -name "ssl.conf" -o -name "httpd.conf" 2>/dev/null | head -1) + if [ -n "$apache_config_file" ]; then + # SSLCertificateFile aktualisieren + sed -i "s|^\( *SSLCertificateFile *\).*|\1$cert_file|" "$apache_config_file" + # SSLCertificateKeyFile aktualisieren + sed -i "s|^\( *SSLCertificateKeyFile *\).*|\1$key_file|" "$apache_config_file" + echo "Apache-Konfiguration aktualisiert." + else + echo "Apache-Konfigurationsdatei nicht gefunden oder nicht aktualisiert." + fi +} + +# Funktion zum Aktualisieren der Nginx-Konfiguration +update_nginx_config() { + local cert_file="$1" + local key_file="$2" + + echo "Aktualisiere Nginx-Konfiguration für SSL-Zertifikate..." + + # Konfigurationsdatei für SSL-Zertifikate finden und bearbeiten + local nginx_config_file="/etc/nginx/nginx.conf" + if [ -f "$nginx_config_file" ]; then + # SSL Zertifikat und Key aktualisieren + sed -i "s|^\( *ssl_certificate *\).*|\1$cert_file;|" "$nginx_config_file" + sed -i "s|^\( *ssl_certificate_key *\).*|\1$key_file;|" "$nginx_config_file" + echo "Nginx-Konfiguration aktualisiert." + else + echo "Nginx-Konfigurationsdatei nicht gefunden oder nicht aktualisiert." + fi +} + +# Funktion zum Ermitteln des installierten Webserver-Dienstes +detect_webserver() { + if [ -f "/etc/apache2/apache2.conf" ]; then + echo "Apache Webserver ist installiert." + fi + if [ -f "/etc/httpd/conf/httpd.conf" ]; then + echo "Apache Webserver ist installiert." + fi + if [ -f "/etc/nginx/nginx.conf" ]; then + echo "Nginx Webserver ist installiert." + fi +} + +echo +# Hauptprogramm +detect_os +install_requierments +generate_ssh_key +copy_ssh_key_to_nas +create_certificate_request +create_remote_folders +#Wird nicht genutz +#setup_ssh_keys +upload_certificate_request +download_certificates +create_fullchain_certificate +copy_certificates + +# Funktionen fue WebServer Zertifiakte +detect_webserver +copy_web_certificates +#umountNFS +echo "Prozess abgeschlossen." diff --git a/SCRIPTE_ALT/full_install_ADDC_DLZ.sh b/SCRIPTE_ALT/full_install_ADDC_DLZ.sh new file mode 100755 index 0000000..31e9db7 --- /dev/null +++ b/SCRIPTE_ALT/full_install_ADDC_DLZ.sh @@ -0,0 +1,176 @@ +#!/bin/bash + +# Globale Variablen +#HOSTNAME=$(hostname -f | tr '[:lower:]' '[:upper:]') # FQDN in Großbuchstaben +HOSTNAME=$(hostname -f) +NETBIOS=$(hostname) +DOMAIN=$(hostname -d | cut -d'.' -f1 | tr '[:lower:]' '[:upper:]') # Kurze Domain in Großbuchstaben +REALM="${DOMAIN^^}.HEIM.LAN" # Realm in Großbuchstaben, muss die gesamte Domain sein +IP_ADDRESS=$(hostname -I | awk '{print $1}') +PASSWORD="P@ssw0rd" # Globale Variable für das Administrator-Passwort +ERROR_LOG="/var/log/samba_install_error.log" + +# Zertifikat-Pfade +tls_keyfile="/etc/samba/tls/private/KEY_${HOSTNAME}.pem" +tls_certfile="/etc/samba/tls/certs/fullchain_${HOSTNAME}.crt" +tls_cafile="/etc/samba/tls/certs/CERT_HEIMLAN_SubCA.crt" + +# ROOT and SubCa +ROOT_CRT="CERT_HEIMLAN_RootCA.crt" +SUBCA_CRT="CERT_HEIMLAN_SubCA.crt" +# Funktion zum Beenden des Skripts bei einem Fehler +error_exit() { + echo "$1" | tee -a $ERROR_LOG + exit 1 +} + +# Funktion zum Kopieren der Zertifikate und Schlüssel in das entsprechende Verzeichnis +copy_certs_key() { + mkdir -p /etc/samba/tls/certs /etc/samba/tls/private || error_exit "Fehler beim Erstellen der Verzeichnisse für Zertifikate und Schlüssel" + + # Kopieren der Zertifikate und Schlüssel + cp /tmp/$ROOT_CRT /etc/samba/tls/certs || error_exit "Fehler beim Kopieren des Zertifikats" + cp /tmp/$SUBCA_CRT /etc/samba/tls/certs || error_exit "Fehler beim Kopieren des Zertifikats" + cp /tmp/CERT_${HOSTNAME}.crt /etc/samba/tls/certs || error_exit "Fehler beim Kopieren des Zertifikats" + cp /tmp/fullchain_${HOSTNAME}.crt /etc/samba/tls/certs || error_exit "Fehler beim Kopieren des Fullchain-Zertifikats" + cp /tmp/KEY_${HOSTNAME}.pem /etc/samba/tls/private || error_exit "Fehler beim Kopieren des Schlüssels" + + # Setzen der Berechtigungen + chmod 644 /etc/samba/tls/certs/* || error_exit "Fehler beim Setzen der Berechtigungen für Zertifikate" + chmod 600 /etc/samba/tls/private/* || error_exit "Fehler beim Setzen der Berechtigungen für Schlüssel" +} + +# Funktion zum Aktualisieren und Installieren von Paketen +install_packages() { + apt-get update || error_exit "Fehler beim Ausführen von apt-get update" + apt-get upgrade -y || error_exit "Fehler beim Ausführen von apt-get upgrade" + apt-get install -y samba samba-common-bin krb5-user krb5-config winbind libnss-winbind libpam-winbind dnsutils bind9 bind9utils bind9-doc || error_exit "Fehler beim Installieren der Pakete" +} + +# Funktion zum Sichern von Konfigurationsdateien +backup_configs() { + [ -f /etc/samba/smb.conf ] && mv /etc/samba/smb.conf /etc/samba/smb.conf.orig || error_exit "Fehler beim Sichern der smb.conf" + [ -f /etc/krb5.conf ] && mv /etc/krb5.conf /etc/krb5.conf.orig || error_exit "Fehler beim Sichern der krb5.conf" +} + +# Funktion zum Erstellen der Samba-Konfiguration +create_samba_config() { + cat < /etc/samba/smb.conf || error_exit "Fehler beim Schreiben der smb.conf" +[global] + workgroup = $DOMAIN + bind interfaces only = Yes + interfaces = $IP_ADDRESS + realm = $REALM + netbios name = $NETBIOS + server role = active directory domain controller + idmap_ldb:use rfc2307 = yes + server services = -dns + + # TLS SETTING + tls enabled = yes + tls keyfile = $tls_keyfile + tls certfile = $tls_certfile + tls cafile = $tls_cafile + + # LOGGING SETTING + log level = 1 + log file = /var/log/samba/log.%m + max log size = 1000 + + # UNIX PASSWORD SETTING + unix password sync = yes + +[sysvol] + path = /var/lib/samba/sysvol + read only = no + +[netlogon] + path = /var/lib/samba/sysvol/${DOMAIN}/scripts + read only = no +EOL +} + +# Funktion zum Erstellen der Kerberos-Konfiguration +create_kerberos_config() { + cat < /etc/krb5.conf || error_exit "Fehler beim Schreiben der krb5.conf" +[libdefaults] + default_realm = $REALM + dns_lookup_realm = true + dns_lookup_kdc = true + ticket_lifetime = 24h + renew_lifetime = 7d + forwardable = true + +[realms] +$REALM = { + default_domain = $(hostname -d) +# pkinit_anchors = /etc/samba/tls/certs/CERT_HEIMLAN_Root.crt + kdc = $(hostname -f) + admin_server = $(hostname -f) +} + +[domain_realm] + .$(hostname -d) = $REALM + $(hostname -d) = $REALM +EOL +} + +# Funktion zum Provisionieren von Samba +provision_samba() { + samba-tool domain provision --use-rfc2307 --realm=$REALM --domain=${DOMAIN} --server-role=dc --adminpass=$PASSWORD --dns-backend=BIND9_DLZ || error_exit "Fehler beim Provisionieren der Samba-Domäne" +} + +# Funktion zum Konfigurieren von Bind9 für DLZ +configure_bind9() { + cp /etc/bind/named.conf.options /etc/bind/named.conf.options.orig || error_exit "Fehler beim Sichern der named.conf.options" + cp /etc/bind/named.conf.local /etc/bind/named.conf.local.orig || error_exit "Fehler beim Sichern der named.conf.local" + + cat < /etc/bind/named.conf.options || error_exit "Fehler beim Schreiben der named.conf.options" +options { + directory "/var/cache/bind"; + + forwarders { + 8.8.8.8; # Google DNS + }; + + dnssec-validation auto; + auth-nxdomain no; # conform to RFC1035 + listen-on-v6 { any; }; +}; +EOL + + cat < /etc/bind/named.conf.local || error_exit "Fehler beim Schreiben der named.conf.local" +include "/var/lib/samba/bind-dns/named.conf"; +EOL +} + +# Funktion zum Setzen der Berechtigungen für Bind9 DLZ +set_bind9_permissions() { + mkdir /var/lib/samba/private/dns + chown bind:bind /var/lib/samba/bind-dns/named.conf || error_exit "Fehler beim Setzen der Berechtigungen für named.conf" + chown -R bind:bind /var/lib/samba/private/dns || error_exit "Fehler beim Setzen der Berechtigungen für das DNS-Verzeichnis" +} + +# Funktion zum Neustarten der Dienste +restart_services() { + systemctl restart smbd nmbd winbind bind9 || error_exit "Fehler beim Neustarten der Dienste" + systemctl enable smbd nmbd winbind bind9 || error_exit "Fehler beim Aktivieren der Dienste" +} + +# Hauptfunktion zum Ausführen aller Schritte +main() { + copy_certs_key + install_packages + backup_configs + create_samba_config + create_kerberos_config + provision_samba + configure_bind9 + set_bind9_permissions + restart_services + + echo "Samba AD DC mit Bind9-DLZ Installation abgeschlossen." +} + +# Ausführen der Hauptfunktion +main