🐚
Raspberry Pi · Bash · lftp · Cronjob

Täglich. Automatisch.
Ohne Cloud.

Ein schlankes Bash-Script läuft jeden Morgen um 3 Uhr auf dem Raspberry Pi und spiegelt den gesamten Fritz!Box-Speicher lokal — mit FTPS, verschlüsselter Verbindung und sicher gespeichertem Passwort.

markus@raspberrypi: ~
markus@raspberrypi:~$ tail -f ~/backup/backup.log
---
--- Backup 2026-07-03 03:00:01 ---
Transferring file `Markus/Notes/note_01.txt`
Transferring file `Markus/Notes/note_02.txt`
Transferring file `Markus/Chat/msgs.txt`
Making directory `Martina/Bilder`
Transferring file `Martina/Bilder/urlaub.jpg`
Transferring file `Martina/Notes/rezepte.txt`
Backup beendet: 03:00:47, Größe: 1.9M
---
markus@raspberrypi:~$ ls ~/backup/
2026-07-01 2026-07-02 2026-07-03 backup.log
markus@raspberrypi:~$
Das Herzstück

backup_fritzbox.sh

Weniger als 20 Zeilen Bash — fertig. Das Script liest Zugangsdaten aus sicheren Konfigurationsdateien, öffnet eine verschlüsselte FTPS-Verbindung und spiegelt den gesamten Fritz!Box-Speicher in einen neuen Snapshot-Ordner.

backup_fritzbox.sh bash
#!/bin/bash source "$HOME/.fritzbackup/config" PASS=$(cat "$HOME/.fritzbackup/password") DATE=$(date +%Y-%m-%d) BACKUPDIR="$HOME/backup/$DATE" LOGFILE="$HOME/backup/backup.log" mkdir -p "$BACKUPDIR" echo "--- Backup $DATE $(date +%H:%M:%S) ---" >> "$LOGFILE" lftp << LFTP >> "$LOGFILE" 2>&1 set ftp:ssl-force true set ssl:verify-certificate no set ssl:check-hostname no set net:timeout 30 set ftp:ssl-auth TLS set file:charset UTF-8 open -u $FTP_USER,$PASS ftp://$FRITZ_HOST mirror --verbose /freeCloud $BACKUPDIR bye LFTP echo "Backup beendet: $(date +%H:%M:%S), Größe: $(du -sh $BACKUPDIR | cut -f1)" >> "$LOGFILE"
~/.fritzbackup/config bash
FRITZ_HOST="192.168.178.1" FTP_USER="markus" BACKUP_HOUR="3" BACKUP_MIN="0"
~/.fritzbackup/password chmod 600
Nur das FTP-Passwort, sonst nichts.
Wird per cat gelesen, nie geloggt.
crontab -e cron
# täglich um 03:00 Uhr 0 3 * * * /home/markus/backup_fritzbox.sh
Interaktives Setup

fritzbackup-setup.sh

Ein zweites Script übernimmt die gesamte Einrichtung: Zugangsdaten setzen, Backup-Script schreiben, Cronjob anlegen, Verbindung testen — alles in einem geführten Menü direkt im Terminal. Einmal ausführen, fertig eingerichtet.

markus@raspberrypi: ~ bash fritzbackup-setup.sh
FritzBackup Setup v1.0
Automatisches Fritz!Box NAS Backup
Aktuelle Einstellungen:
Fritz!Box: 192.168.178.1
FTP-Benutzer: markus
Backup-Zeit: 03:00 Uhr
Backup-Pfad: /home/markus/backup
Vorhandene Backups: 1 Tage, 3.9M gesamt
Letztes Backup:
Transferring file `Martina/Chat/msgs_Martina.txt`
Backup beendet: 11:55:24, Größe: 1.9M
Was möchtest du tun?
1) Zugangsdaten einrichten / ändern
2) Backup jetzt starten
3) Backup-Verlauf anzeigen
4) Verbindung testen
0) Beenden
Auswahl:
⚙️

1 · Zugangsdaten einrichten

Führt Schritt für Schritt durch IP-Adresse, FTP-Benutzername und Passwort. Danach testet das Script sofort die FTPS-Verbindung — bei Erfolg werden config und password mit chmod 600 gespeichert, das Backup-Script geschrieben und der Cronjob angelegt.

chmod 600CronjobVerbindungstest
▶️

2 · Backup jetzt starten

Führt das Backup-Script sofort manuell aus — nützlich für den ersten Test oder um zwischendurch einen Snapshot zu erzwingen. Das Log erscheint direkt im Terminal.

ManuellLive-Log
📋

3 · Backup-Verlauf anzeigen

Listet alle vorhandenen Snapshot-Ordner mit Datum und Größe auf — ein schneller Überblick wie viele Tage gespeichert sind und wie viel Platz sie belegen.

SnapshotsDatumGröße
🔌

4 · Verbindung testen

Öffnet eine FTPS-Verbindung zur Fritz!Box und listet das Wurzelverzeichnis — sofortiges Feedback ob Zugangsdaten und Netzwerkverbindung stimmen, ohne ein vollständiges Backup anzustoßen.

FTPSDiagnose
Was es leistet

Simpel. Zuverlässig. Privat.

Kein Overhead, keine Abhängigkeiten — reines Bash mit lftp.

🔄

Tägliche Snapshots

Jeder Lauf erstellt einen eigenen Ordner mit dem Tagesdatum. Ältere Snapshots bleiben erhalten — du kannst jederzeit auf jeden beliebigen Tag zurückgehen, ohne etwas zu überschreiben.

mirrorDatum-OrdnerUnveränderlich
🔐

Sicheres Passwort

Das FTP-Passwort liegt in einer separaten Datei mit chmod 600 — nur der Besitzer kann sie lesen. Es wird weder geloggt noch in der Konfiguration gespeichert. Einmalig per Terminal setzen, danach nie wieder anfassen.

chmod 600Nie geloggtLokal
🛡️

Verschlüsselte Verbindung

lftp verbindet per FTPS mit TLS-Pflicht (ftp:ssl-force true, ftp:ssl-auth TLS). Die Daten zwischen Fritz!Box und Pi sind verschlüsselt übertragen — auch im Heimnetz.

FTPSTLSssl-force
📋

Vollständiges Log

Jeder übertragene Pfad, jedes erstellte Verzeichnis und der Abschluss mit Größenangabe landen in backup.log. FritzArchiv liest dieses Log und zeigt es direkt in der App an.

backup.logDateilisteGröße

Vollautomatisch

Ein einziger Crontab-Eintrag (`0 3 * * *`) genügt. Der Pi läuft immer, braucht kein Display, keinen Login — das Backup passiert ohne jedes Zutun.

Cron03:00 UhrHeadless
🧩

FritzArchiv-Integration

Das Script und die macOS-App sind aufeinander abgestimmt: FritzArchiv verbindet sich per SSH mit dem Pi, liest die Snapshot-Ordner und das Log — und kann einzelne Dateien per FTPS zurück auf die Fritz!Box spielen.

SSHFritzArchivRestore
Einrichten

In fünf Schritten startklar

Einmalig einrichten — danach läuft das Backup vollautomatisch jeden Morgen.

1

lftp installieren

sudo apt install lftp auf dem Pi ausführen.

2

Konfiguration anlegen

Ordner ~/.fritzbackup/ erstellen, config und password Dateien befüllen, chmod 600 setzen.

3

Script kopieren

backup_fritzbox.sh nach ~/ kopieren und mit chmod +x ausführbar machen.

4

Manuell testen

Script einmal von Hand starten und prüfen ob backup.log befüllt wird und der Snapshot-Ordner entsteht.

5

Cronjob eintragen

crontab -e öffnen und 0 3 * * * ~/backup_fritzbox.sh eintragen. Fertig.

🔒

Das Passwort verlässt den Pi nie

Das FTP-Passwort wird einmalig manuell per Terminal in ~/.fritzbackup/password geschrieben — chmod 600, nur für den Besitzer lesbar. Das Script liest es per cat zur Laufzeit und schreibt es in keine Logdatei. Kein Cloud-Dienst, keine externe API, keine Verbindung nach draußen — ausschließlich Fritz!Box ↔ Pi.

Das Prinzip

Warum nicht einfach rsync?

Weil die Fritz!Box kein SSH spricht — aber FTPS.

🌐

FTPS statt SSH

Die Fritz!Box bietet keinen SSH-Zugang, aber einen eingebauten FTP/FTPS-Server. lftp ist das perfekte Werkzeug dafür — stabil, schnell, scriptbar.

📁

mirror statt zip

lftp mirror erzeugt keine Archive — Dateien liegen als Originale im Snapshot-Ordner. Kein Entpacken, kein Spezial-Tool nötig, FritzArchiv kann direkt darauf zugreifen.

Nur Änderungen

mirror überträgt nur neue oder geänderte Dateien — das Backup dauert bei unverändertem Bestand nur Sekunden, selbst bei vielen Dateien.

🛠️

Kein Daemon, kein Service

Das Script braucht keine laufende Anwendung, kein Docker-Container, keine systemd-Unit. Cron startet es, es läuft, es endet — fertig.