Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripts:backup_with_secure_copy_and_ftp

Mini-Backup mit scp nach ftp

Ich habe ein kompaktes und recht einfaches Backup-Script in Perl geschrieben, das mittels afio eine Liste von Verzeichnissen speichert. Es werden dabei die ältesten Backups automatisch gelöscht. Da aber auf einem nicht auf jedem Server ein externes Speichermedium wie DVD oder Tape zur Verfügung steht, muss ein anderes Medium herhalten. Die meisten Hosting-Provider bieten Backupspeicher per FTP an. Einige der FTP-Server erlauben sicheres Kopieren mittels scp und Authentifizierung per Keys.

Key erzeugen

Man erzeugt einen Schlüssel für die sichere Übertragung und kopiert ihn dann auf den FTP-Server.

ssh-keygen
ssh-keygen -e -f .ssh/id_rsa.pub | grep -v "Comment:" > .ssh/id_rsa_rfc.pub
cat .ssh/id_rsa_rfc.pub >> backup_authorized_keys
echo mkdir .ssh | sftp foo@bar.backup.ftp
scp backup_authorized_keys foo@bar.backup.ftp:.ssh/authorized_keys

Backup mittels scp auf den FTP kopieren

Ein Einzeiler reicht jetzt aus, um ein Verzeichnis mit den Backups auf den FTP-Server zu kopieren. Mein Backupscript legt im Backupverzeichnis für jeden Tag ein eigenes Verzeichnis nach dem Schema YYYYMMDD an, in dem es dann die afio-Archive sichert. Gibt man scp das Quellverzeichnis direkt an, so kopiert es das Verzeichnis mit dem gleichen Namen in das Zielverzeichnis. Ein Nachteil gibt es allerdings: man müsste die überflüssigen Verzeichnisse wieder ermitteln und löschen. Wechselt man allerdings zuvor in das Verzeichnis mittels cd und sagt scp es solle aus dem aktuellen Verzeichnis alles kopieren, so landen alle Dateien im richtigen Ordner. Beim nächsten Aufruf des Scripts werden dann die Daten automatisch überschrieben.

cd /home/backup/foo.bar/$(date +'%Y%m%d') && scp -Cri /foo/.ssh/id_rsa . foo@bar.backup.ftp:/backup

Rotation

Es gibt sicher auch andere Methoden, um auf dem FTP Dateien zu löschen, allerdings setzen Lösungen wie im Thread "FTP-Befehl zum Löschen" andere Namensschemata vorraus. Für meine Variante, bei dem ich das Sicherungsdatum als Verzeichnisnamen verwende, ist diese Variante nicht zu gebrauchen. Eine kleine Modifikation des Einzeilers erlaubt es, eine simple Rotation einzubauen: man ergänzt das Zielverzeichnis z.B. mit dem Wochentag. Somit wäre eine automatische Rotation auf dem FTP machbar.

Täglich über den Tag der Woche:

cd /home/backup/foo.bar/$(date +'%Y%m%d') && scp -Cri /foo/.ssh/id_rsa . foo@bar.backup.ftp:/backup/$(date +'%u')

Täglich über den Tag des Monats:

cd /home/backup/foo.bar/$(date +'%Y%m%d') && scp -Cri /foo/.ssh/id_rsa . foo@bar.backup.ftp:/backup/$(date +'%d')

Wöchentlich mittels der Kalenderwoche:

cd /home/backup/foo.bar/$(date +'%Y%m%d') && scp -Cri /foo/.ssh/id_rsa . foo@bar.backup.ftp:/backup/$(date +'%V')

Ich empfehle erstmal die erste Variante, um zu sehen, wieviel Speicherplatz tatsächlich anfällt und wähle danach die passende Modifikation aus.

Inhalt auflisten

Wenn man den Inhalt des FTP-Servers auflisten möchte, so loggt man sich gewöhnlich von Hand ein. sftp erlaubt es aber, Befehle auch über eine Pipe oder aus einer Datei entgegen zu nehmen.

echo "ls -al backup" | sftp foo@bar.backup.ftp
scripts/backup_with_secure_copy_and_ftp.txt · Zuletzt geändert: 07.10.2012 18:31 (Externe Bearbeitung)