Donnerstag, 07 Februar 2019 14:08

Linux VPS Server mit Windows und SSH sichern

Artikel bewerten
(0 Stimmen)

Für meinen VPS-Server suchte ich nach einer günstigen Sicherungsmethode, um den Ubuntu-Server zu sichern. Am einfachsten ist natürlich die Sicherungsmethode über den ISP-Anbieter. Die Backup-Lösung des Anbieters kostet jedoch zusätzliches Geld. Wenn Sie Geld sparen möchten, müssen Sie sich selbst um die Datensicherung kümmern. Zu diesem Zweck kann die Linux VPS-Serversicherung mithilfe des Powershell-Skripts von Ihrem vorhandenen Windows-Client erstellt werden.

Hinweis: Das PowerShell-Skript über WinSCP ist nicht besonders leistungsfähig. Es gibt jetzt die WSL für Windows 10 und es ist sinnvoller, die WSL und Rsync zu verwenden.

Da ich keine zeitkritischen Daten auf dem VPS-Server habe, benötige ich keine Sicherung, die im Falle eines Fehlers schnell wiederhergestellt werden kann. Eine Sicherung über das Dateisystem, damit alle Website-Daten gesichert werden. Eine Sicherung mit den SQL-Dumps in der MariaDB-Datenbank und eine Sicherung mit den Konfigurationsdateien reichen für mich aus. Es gibt verschiedene Methoden, um die Sicherung sauber per Skript zu implementieren. Die erste Methode ist ein Skript mit rsync und cygwin. Eine andere Methode besteht darin, mit vorhandenen Tools zu arbeiten, nämlich mit PowerShell.

Das script - Linux VPS Server Datensicherung 

Das Skript erfordert eine DLL von WinSCP, um eine Verbindung zum VPS-Server herzustellen. Installieren Sie WinSCP, um die DLL zu verwenden. Passen Sie dann die Verbindungsdaten im PowerShell-Skript an und können Sie das Skript verwenden. Passen Sie auch das Zielverzeichnis an, um die gesicherten Daten zu speichern, wenn Sie kein Laufwerk D: \ haben.

# ===============================================================================
#   Author: Griep Marco
#   Description: Backup of an Remote Server via SSH
#   Todo: Change the Connection Credentials in the sessionOptions
# ===============================================================================

$shutdown = Read-Host "Shutdown after Backup?"

try
{
    # Load WinSCP .NET assembly
    Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"

    # Setup session options
    $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
        Protocol = [WinSCP.Protocol]::Sftp
        HostName = "1.2.3.4" # YOUR IP ADDRESS
        UserName = "root"
        Password = ""
        SshHostKeyFingerprint = "ssh-ed<PUT YOUR FINGERPRINT IN HERE>"
    }

    $session = New-Object WinSCP.Session

    try
    {
        # Connect
        $session.Open($sessionOptions)

        # Download files
        $transferOptions = New-Object WinSCP.TransferOptions
        $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary

        Write-Host "Transfer HTML Files. Please Wait"

        $transferResult =
            $session.GetFiles("/var/www/html*", "D:\BackupVPS\*", $False, $transferOptions)

        # Throw on any error
        $transferResult.Check()

        # Print results
        foreach ($transfer in $transferResult.Transfers)
        {
            Write-Host "Download of $($transfer.FileName) succeeded"
        }

        Write-Host "Transfer Apache Config Files. Please Wait"

        $transferResult =
            $session.GetFiles("/etc/apache2*", "D:\BackupVPS\apache2\*", $False, $transferOptions)

        # Throw on any error
        $transferResult.Check()

        # Print results
        foreach ($transfer in $transferResult.Transfers)
        {
            Write-Host "Download of $($transfer.FileName) succeeded"
        }

        Write-Host "I will try to zip all this. Please wait"

        $source = "D:\BackupVPS"

        $destination = "D:\$((Get-Date).ToShortDateString()).zip"

         If(Test-path $destination) {Remove-item $destination}

        Add-Type -assembly "system.io.compression.filesystem"

        [io.compression.zipfile]::CreateFromDirectory($Source, $destination) 

        Write-Host "Finished"
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }
}
catch [Exception]
{
    Write-Host "Error: $($_.Exception.Message)"
}

if ($shutdown -eq "y") {
    shutdown -s -f -t 0
}
Gelesen 36 mal Letzte Änderung am Dienstag, 22 Dezember 2020 09:06

Schreibe einen Kommentar

Bitte achten Sie darauf, alle Felder mit einem Stern (*) auszufüllen. HTML-Code ist nicht erlaubt.