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/