Neue Skripte hinzugefügt
This commit is contained in:
Executable
+603
@@ -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:
|
||||||
|
<Servername>\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"
|
||||||
Executable
+614
@@ -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:
|
||||||
|
<Servername>\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"
|
||||||
Executable
+1022
File diff suppressed because it is too large
Load Diff
Executable
+541
@@ -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."
|
||||||
Executable
+176
@@ -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 <<EOL > /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 <<EOL > /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 <<EOL > /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 <<EOL > /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
|
||||||
Reference in New Issue
Block a user