SSH automatische Remote-Backups

16

Ich habe zwei Maschinen Aund B. Maschine Akann in ssh B. Ahat viel freien Speicherplatz. BDie Daten von befinden sich in einer Art riskanten Situation. Wie kann ich alle BDaten Aautomatisch sichern ? Es muss nicht schrecklich häufig sein, aber es sollte die Hände frei sein. Jedes Mal A, wenn Stiefel hochgefahren wurden, waren sie häufig genug. Ich habe gehört, dass dies mit der Synchronisierung möglich ist.

PyRulez
quelle

Antworten:

11

Um dies in den meisten Linux-Distributionen täglich zu tun, sollten Sie in der Lage sein, den rsyncBefehl (gemäß der Antwort von @ guido ) in ein Skript zu schreiben und das Skript in das /etc/cron.dailyVerzeichnis zu schreiben . Solange anacroninstalliert (möglicherweise nicht standardmäßig), werden verpasste cron.dailyJobs beim nächsten Start der Maschine abgefangen (und um Mitternacht ausgeführt, wenn die Maschine umgeschaltet wird).

Für das Skript würden Sie einfach Folgendes tun:

#!/bin/sh
rsync -a user@serverB:/source/folder/ /destination_folder

Sie können die -z(Komprimierungs-) Option hinzufügen, wenn das Backup über eine langsame (ish-) Verbindung erfolgt oder wenn Sie Bandbreite sparen möchten. Meiner Erfahrung nach beeinträchtigt dies jedoch die Leistung moderner Computer / Netzwerke.

Wenn Sie von jeder Sicherung ein Protokoll führen möchten, können Sie Folgendes tun:

#!/bin/sh
rsync -av user@serverB:/source/folder/ /destination_folder \
  >/var/log/backup_log 2>&1

Damit dies als Cron-Job funktioniert, muss für root auf serverA ein passwortloses SSH eingerichtet sein , damit Sie sich bei serverB anmelden können. Dies muss das Root-Konto sein (dh es muss eingegeben werden ), da Jobs als Root ausgeführt werden./root/.sshcron.daily

Graeme
quelle
Nicht unbedingt, wenn Sie einen öffentlichen Schlüssel und benutzerspezifische Cronjobs verwenden.
Braiam
@Braiam, anacronnimmt keine cronAufträge pro Benutzer auf . Sie können jedoch jederzeit su/ sudoaus dem Skript verwenden, um rsync als bestimmten Benutzer auszuführen. Beachten Sie jedoch, dass die Schlüssel sicherer unter aufbewahrt werden /root.
Graeme
1
Wenn Sie einen Cron-Job und ssh mit root verwenden möchten, ist es viel sicherer zu beschränken, was root auf dem zweiten Computer in der Datei authorized_keys tun kann.
Guido
1
@guido, es ist nicht erforderlich, sich auf serverB als root anzumelden, nur weil Sie auf serverA als root angemeldet sind. @JennyD hat bereits Vorschläge gemacht, was hier zu tun ist, kann aber usernur ein normaler Benutzer von machineB sein, je nachdem, was Sie sichern .
Graeme
1
Höchstwahrscheinlich hat Ihr Benutzer keinen Lesezugriff auf die Dateien auf severB. In diesem Fall müssen Sie entweder einen Benutzer verwenden, der dies tut, oder dem aktuellen Benutzer die richtigen Berechtigungen erteilen, indem Sie ihn entweder zu den richtigen Gruppen hinzufügen oder die Berechtigungen für die Dateien ändern. Wenn Sie ls -lIhrer Frage ein Beispiel der aufgetretenen Fehler und die Ausgabe einiger Dateien hinzufügen , können die Mitarbeiter weitere Hinweise geben.
Graeme
5

Ich würde vorschlagen, rdiff-backup zu verwenden . Ich verwende es jetzt, um jede Nacht automatische inkrementelle Backups meiner eigenen Daten zu erstellen (zwei Workstations, zwei Server und ein Konto auf dem Server einer anderen Person).

Ich habe zuvor rsync verwendet, bin jedoch auf rdiff-backup umgestiegen, da dies praktischer ist und inkrementelle Sicherungen großer Dateien wie z. B. Festplattenimages von virtuellen Maschinen durchführen kann. rdiff-backup ist sehr ähnlich zu meinen vorherigen rsync-backup-scrips, aber richtig gemacht .

Ich habe eine Skriptdatei in /etc/cron.daily auf dem Computer abgelegt, auf dem die Sicherung gespeichert ist. Diese startet rdiff-backup jeden Tag in den frühen Morgenstunden und ruft die Daten vom Remote-Computer ab.

Thomas Padron-McCarthy
quelle
4

Zusätzlich zu all den vorherigen Antworten, hier eine, die sich auf SSH-Schlüssel stützt, mit Einschränkungen, was getan werden kann, wenn man sich mit diesem Schlüssel anmeldet.

Auf Server A

In diesem Fall ist es weniger wichtig, wenn Sie einen separaten Benutzer erstellen oder einen Ihrer vorhandenen Benutzernamen verwenden. Wenn ich es wäre, würde ich jedoch einen separaten Benutzer erstellen. In den folgenden Beispielen verwende ich den Benutzernamen bkpuserfür beide Server.

Wenn Sie angemeldet sind bkpuser, erstellen Sie einen SSH-Schlüssel ohne Passwort.

Auf Server B

Aktivieren Sie PubkeyAuthenticationin sshd_config.

Erstellen Sie den Benutzer bkpuser. Legen Sie ein sehr kompliziertes Kennwort fest oder deaktivieren Sie die Kennwortanmeldung für diesen Benutzer (genau wie Sie dies tun, hängt davon ab, welches Unix und welche Distribution Sie ausführen). Der Benutzer sollte sich nur mit einem SSH-Schlüssel anmelden. Stellen Sie sicher, dass bkpuserLesezugriff auf alle Verzeichnisse und Dateien besteht, die Sie sichern möchten.

Kopieren Sie den öffentlichen Teil des Schlüssels, der von A nach ~bkpuser/.ssh/authorized_keysB erstellt wurde. Bearbeiten Sie das Kontrollkästchen, um einen Befehl beim Herstellen einer Verbindung automatisch auszuführen. Dieser Befehl sollte kein Zeiger auf ein Shell-Skript sein. Fügen Sie stattdessen das Shell-Skript direkt in den Schlüssel ein. Schließen Sie auch eine Einschränkung ein, damit der Schlüssel nur von Server A und keinem anderen Server verwendet werden kann. Im folgenden Beispiel gebe ich Server A die IP-Adresse 10.1.2.3und gehe davon aus, dass sich alle zu sichernden Dateien darunter befinden /data.

from="10.1.2.3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="cd /data;/usr/bin/tar -cf - *; /usr/bin/logger -t BACKUP -p daemon.info \"INFO: Backup-files on $HOST fetched from ${SSH_CLIENT%% *} by $USER\";" ssh-dss AA.....

Auf Server A

Wenn Sie eine der Cron-Registerkarten verwenden, die @rebootEinträge unterstützt , fügen Sie einen solchen Eintrag bkpusermit dem Befehl zu s crontab hinzu ssh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz. Wenn dies nicht möglich ist, können Sie es jederzeit einstellen. Wenn es meine Daten wären, würde ich es wahrscheinlich täglich tun.

Jenny D
quelle
2

Hier finden Sie eine vollständige Lösung für die tägliche Sicherung von Server B auf Server A um 4 Uhr morgens mithilfe von SSH.

Erstellen Sie eine automatische SSH-Verbindung von Server B zu Server A

ssh-keygen -t dsa -b 1024
ssh-copy-id -i ~/.ssh/id_dsa.pub "-p ssh_port root@server_a"

Erstellen Sie ein Sicherungsskript auf Server B

nano / root / backup

# !/bin/sh

# Variables loading
HOST="root@server_a"
PORT=22
DIR="/var/backups/server_b"

# Directories creating
ssh -p $PORT $HOST <<EOF
    mkdir -p $DIR/home
    logout
EOF

# Files backing up
rsync -aze "ssh -p $PORT" --delete /home/user $HOST:$DIR/home

chmod 744 / root / backup

Automatisieren Sie die Sicherung auf Server B

crontab -e

0 4 * * * /root/backup > /dev/null

Weitere Informationen finden Sie auf den Seiten Herstellen einer Verbindung zu SSH ohne Eingabe eines Kennworts unter Linux und Sichern eines Servers unter Debian oder Ubuntu Linux .

Guillaume
quelle
1

Sie können dafür rsync verwenden (auf eine Art umgekehrte Weise):

serverA# rsync -avz user@serverB:/path-to-backup.tar.gz /var/backup

wo:

-avz  archive, compress and be verbose
Guido
quelle
Ich bin mir ziemlich sicher , -aimpliziert -r.
Shadur
du hast vollkommen recht
guido
-1

Der springende Punkt ist, wie es automatisch gemacht wird (keine Eingabe von Passwörtern erforderlich):

  • Starten Sie eine screenoder tmuxSitzung
  • ausführen eval $(ssh-agent)
  • fügen Sie Ihren Schlüssel mit hinzu ssh-add
  • Flags für Rsync export RSYNC_RSH="ssh -i ~/.ssh/id_rsa ..."
  • Backup alle 24h mit while :; do rsync -av u@h:/p /local; sleep $[24*60*60]; done

quelle
+1 für die passwortlose ssh.
Graeme
Also würde ich all dies in ein Startskript schreiben, oder?
PyRulez
1
Ich denke hier fängt die "wirklich wichtige Frage" an, wie viel Sicherheit benötigt wird? Mach es mit Passwörtern oder ohne? Dies funktioniert nur, wenn Sie 1) es von B aus tun, A aussetzen oder in den Ruhezustand versetzen. Es funktioniert nicht, wenn Sie A ausschalten. Wenn Sie ohne Passwörter auskommen, werden Sie zu einer Art "riskanten Situation".
Es ist nicht erforderlich, RSYNC_SSHSSH-Schlüssel zur Suche nach Standardpositionen hinzuzufügen .
Pavel Šimerda
1
Ich weiß das. Sie haben auch die ...Punkte überwacht, an denen Sie nützliche Argumente hinzufügen können. Sie haben auch meinen letzten Kommentar nicht gelesen, in dem ich die "wirklich wichtige Frage" erwähne, daher würde ich das niemals mit passwortlosen Schlüsseln tun. Sie müssen auch aktivieren PubkeyAuthenticationund niemand hat es gesagt.