🐚
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.