Duplicity mit SFTP – Kurzanleitung

Veröffentlichung 3. Juli 2018 @ 23:07
Letzte Änderung 14. April 2021 @ 13:01

Voraussetzungen

Netzwerk

  • Lokaler Benutzer root
  • SFTP-Backup-Benutzer sftpuser
  • SFTP-Backup-Server sftp.backup.com
  • SSH-Port 42022
  • SSH-Client-Schlüssel /root/.ssh/id_ed25519

Software

  • duplicity 0.7.06 #duplicity –version
  • Pexpect 4.0.1 #apt-cache show python-pexpect | grep Version
  • Ubuntu Server 16.04.04 LTS #lsb_release -a

Ordner und Dateien

  • Log /var/log/duplicity/sftp-backup.log
  • Logrotate /etc/logrotate.d/duplicity
  • Skript /root/sftp-backup.sh

duplicity und Pexpect installieren

apt install duplicity python-pexpect

Skript für SFTP-Backup anlegen

Skript erstellen

#!/bin/bash
export FTP_PASSWORD=*** Passphrase für SSH-Schlüssel id_ed25519 für Parameter --ssh-askpass
export PASSPHRASE=*** Passphrase für Backup-Verschlüsselung
#(Inkrementelle) Sicherung in Verzeichnis sftp auf SFTP-Backup-Server,
#Ausschluss der Ordner /dev, /media, /proc, /sys und /tmp,
#wöchentliche Komplettsicherung:
duplicity --exclude /dev --exclude /media --exclude /proc --exclude /sys --exclude /tmp --full-if-older-than 1W --ssh-askpass --ssh-options="-oIdentityFile='/root/.ssh/id_ed25519'" / pexpect+sftp://sftpuser@sftp.backup.com:42022/sftp
#Vergleich von Original und Sicherung:
duplicity verify --exclude /dev --exclude /media --exclude /proc --exclude /sys --exclude /tmp --ssh-askpass --ssh-options="-oIdentityFile='/root/.ssh/id_ed25519'" / pexpect+sftp://sftpuser@sftp.backup.com:42022/sftp /
#Löschen von Sicherungen, die älter als 1 Monat sind:
duplicity remove-older-than 1M --force --ssh-askpass --ssh-options="-oIdentityFile='/root/.ssh/id_ed25519'" / pexpect+sftp://sftpuser@sftp.backup.com:42022/sftp
unset FTP_PASSWORD
unset PASSPHRASE

Zugriffsrechte setzen

chmod 0700 /root/sftp-backup.sh

Cronjob für automatisches Backup mit Logging und Rotation erstellen

Ordner für Logdateien anlegen

mkdir --mode=0700 /var/log/duplicity

Crontab ergänzen

crontab -e -u root
...
15 08 * * * /root/sftp-backup.sh >> /var/log/duplicity/sftp-backup.log

Konfigurationsdatei für Logrotate anlegen

/var/log/duplicity/sftp-backup.log {
daily
missingok
nocompress
notifempty
rotate 7
}

Backup von SFTP-Server rücksichern

duplicity restore --ssh-askpass --ssh-options="-oIdentityFile='/root/.ssh/id_ed25519'" pexpect+sftp://sftpuser@sftp.backup.com:42022/sftp /

[Beispiel] Teilbackup von /home in Verzeichnis /home-sftp-backup rücksichern und auf geänderte Ordner und Dateien prüfen

duplicity restore --file-to-restore home --ssh-askpass --ssh-options="-oIdentityFile='/root/.ssh/id_ed25519'" pexpect+sftp://sftpuser@sftp.backup.com:42022/sftp /home-sftp-backup
diff --brief --recursive /home /home-sftp-backup
#rm --recursive /home-sftp-backup

[Optional] Backup bereinigen

z. B. bei Meldung „Achtung, es wurden unvollständige Sicherungssätze gefunden, wahrscheinlich von einer abgebrochenen Sitzung zurückgelassen“ / „Warning, found incomplete backup sets, probably left from aborted session“

duplicity cleanup --force --ssh-askpass --ssh-options="-oIdentityFile='/root/.ssh/id_ed25519'" pexpect+sftp://sftpuser@sftp.backup.com:42022/sftp

Quellen

http://duplicity.nongnu.org/duplicity.1.html
ttp://manpages.ubuntu.com/manpages/xenial/man5/crontab.5.html
http://manpages.ubuntu.com/manpages/xenial/man8/logrotate.8.html
https://pexpect.readthedocs.io/en/stable/
https://www.gnu.org/software/bash/manual/