MikroTik Knowledge-Base: Automatisches SFTP-Backup (ROS v7)¶
Dieser Eintrag beschreibt ein produktives MikroTik-Skript, das sowohl eine Text-Konfiguration (.rsc, inkl. sensitiver Angaben) als auch ein binäres System-Backup (.backup) erstellt, beides per SFTP auf einen externen Server hochlädt und anschließend die lokalen Dateien wieder löscht. Das Skript ist für RouterOS v7 ausgelegt.
Ziel & Funktionsumfang¶
- Erzeugt einen sprechenden Dateinamen aus Hostname, Board-Modell, Datum und Uhrzeit.
- Exportiert die laufende Konfiguration inkl. sensitiver Werte (
/export terse show-sensitive) in eine.rsc-Datei. - Erstellt zusätzlich ein binäres System-Backup (
/system backup save) in eine.backup-Datei. - Lädt beide Dateien via SFTP auf einen beliebigen Port hoch.
- Löscht die lokalen Backup-Dateien nach erfolgreichem Upload.
- Schreibt klare Log-Meldungen für Erfolg/Fehlschlag.
Skript (Original)¶
Hinweis: Werte für Server, Benutzer, Passwort, Port und Zielverzeichnis anpassen.
:log info "Starting Automatic Backup Script"
:local SFTPserverAddress "address";
:local serverport 222;
:local SFTPuser "user";
:local SFTPpass "pass";
:local dir "directory";
:local hostname [/system identity get name];
:local board [/system routerboard get model];
:local thisdate [/system clock get date]
:local thistime [/system clock get time]
:local datetimestring ([:pick $thisdate 4 6] . [:pick $thisdate 0 3] . [:pick $thisdate 7 11])
:local timetimestring ([:pick $thistime 0 2] .":" . [:pick $thistime 3 5] .":" . [:pick $thistime 6 8])
:local backupfilename ($hostname."-".$board."-".$datetimestring."_".$timetimestring)
/export terse show-sensitive file="$backupfilename"
/system backup save name="$backupfilename"
:do { [/tool fetch url="sftp://$SFTPserverAddress/$dir/$backupfilename.rsc" port=$serverport user=$SFTPuser password=$SFTPpass src-path="$backupfilename.rsc" upload=yes]
} on-error={:log error message="SFTP upload failed: $backupfilename.rsc"}
:do { [/tool fetch url="sftp://$SFTPserverAddress/$dir/$backupfilename.backup" port=$serverport user=$SFTPuser password=$SFTPpass src-path="$backupfilename.backup" upload=yes]
} on-error={:log error message="SFTP upload failed: $backupfilename.backup"}
/file remove "$backupfilename.rsc"
/file remove "$backupfilename.backup"
:log info "Backup Script Finished!"
Variablen & Bedeutung¶
| Variable | Bedeutung | Beispiel / Hinweis |
|---|---|---|
SFTPserverAddress |
Hostname/IP des SFTP-Servers | backup.company.tld oder 192.0.2.10 |
serverport |
TCP-Port des SFTP-Dienstes | Standard 22, hier z. B. 222 |
SFTPuser / SFTPpass |
Zugangsdaten für SFTP | Benutzer muss Schreibrechte im Zielpfad haben |
dir |
Zielverzeichnis auf dem SFTP-Server | Ohne führenden Slash oder nach Bedarf z. B. mikrotik/backups |
hostname |
Router-Identität | Wird aus /system identity get name gelesen |
board |
Board-/Modellbezeichnung | Aus /system routerboard get model |
datetimestring |
Datum als DDmmmYYYY |
Aus [/system clock get date] (z. B. 14sep2025) |
timetimestring |
Uhrzeit als HH:MM:SS |
Aus [/system clock get time] |
backupfilename |
Finaler Basename ohne Endung | z. B. BranchRouter-RB4011-14sep2025_02:15:00 |
Ablauf im Detail¶
-
Initialisierung & Variablen
Das Skript liest Systemidentität, Board-Modell, Datum und Zeit aus und baut darausbackupfilename. -
Konfig-Export
/export terse show-sensitive file="$backupfilename"Erzeugt eine*.rscmit kompakten Befehlen inkl. sensitiver Werte (z. B. Passwörter, PSK). -
Binäres Backup
/system backup save name="$backupfilename"Erzeugt die*.backupfür vollständige Wiederherstellung (Router-spezifisch). -
SFTP-Upload
Zweifetch-Befehle übertragen die Dateien an die Zieldestination. src-path="...local..."= Quelle auf dem Router-
url="sftp://server/dir/Zielname"= Ziel auf dem Server
Bei Fehlern wird eine Log-Meldung mitSFTP upload failed: ...geschrieben. -
Lokales Aufräumen
Nach erfolgreichem Upload werden beide lokalen Dateien gelöscht. -
Logging
Start/Ende sowie etwaige Fehler erscheinen in/log print.
Voraussetzungen¶
- RouterOS v7 auf dem Router.
- Zeit/NTP korrekt konfiguriert (für sinnvolle Zeitstempel).
- Netzwerk-Erreichbarkeit des SFTP-Servers (Firewall/NAT erlaubt TCP zum SFTP-Port).
- SFTP-Server mit vorhandenem Zielverzeichnis und ausreichenden Rechten.
- Benutzergruppe/Policies: Das Skript läuft typischerweise als
admin(Scheduler), was ausreichend Rechte hat.
Installation¶
-
Skript anlegen
/system script add name=AutoBackupToSFTP policy=ftp,read,write,test,password source="<<HIER DEN CODE EINFÜGEN>>"policy=ist bei v7 seltener nötig; historisch für v6. Bei v7 genügt i. d. R. Admin-Kontext. -
Manuell testen
/system script run AutoBackupToSFTP /log print where message~"Backup Script" -
Scheduler einrichten (z. B. täglich 02:15)
/system scheduler add name=AutoBackupDaily start-time=02:15:00 interval=1d on-event="/system script run AutoBackupToSFTP" -
Optional: Logging-Regel (Skripte separat protokollieren/weiterleiten)
/system logging add topics=script action=memory # Für externen Syslog: # /system logging add topics=script action=remote
Best Practices & Sicherheit¶
- Sichere Übertragung: SFTP (SSH) schützt Dateien unterwegs. Verwende keinen Klartext-FTP.
- Zugangsdaten:
show-sensitiveexportiert Passwörter/Schlüssel — die.rscenthält Geheimnisse.
→ Stelle sicher, dass der Zielserver gehärtet ist und die Dateien zugriffsbeschränkt abgelegt werden. - Aufbewahrung/Retention: Plane Server-seitige Löschregeln (z. B.
find -mtime +30 -deletevia Cron), da der Router Remote-Dateien hier nicht entfernt. - Identität ohne Leerzeichen: Leerzeichen im Hostnamen sind erlaubt, können in Dateinamen aber unhandlich sein. Empfehlenswert:
Site-RouterstattSite Router. - Zeichen in Dateinamen:
:ist für Linux/SFTP ok. Für maximalen Cross-Plattform-Komfort siehe Anpassung unten.
Optionale Anpassungen¶
1) Zeitstempel ohne Doppelpunkte¶
Ersetzt : in der Uhrzeit (besser für Windows/Samba-Shares oder Tools, die : nicht mögen).
:local thistime [/system clock get time]
# "HHMMSS" statt "HH:MM:SS"
:local timetimestring ([:pick $thistime 0 2] . [:pick $thistime 3 5] . [:pick $thistime 6 8])
2) Unterverzeichnis pro Router¶
Lege auf dem SFTP-Server pro Gerät einen Ordner an:
:local dir ("mikrotik/" . $hostname)
3) Zusätzliche Dateiendungen markieren¶
Falls du Backups leichter unterscheiden willst:
:local backupbasename ($hostname."-".$board."-".$datetimestring."_".$timetimestring)
:local rscname ($backupbasename . ".config.rsc")
:local binname ($backupbasename . ".system.backup")
/export terse show-sensitive file="$rscname"
/system backup save name="$binname"
:do { /tool fetch url=("sftp://" . $SFTPserverAddress . "/" . $dir . "/" . $rscname) port=$serverport user=$SFTPuser password=$SFTPpass src-path=$rscname upload=yes } on-error={:log error message=("SFTP upload failed: " . $rscname)}
:do { /tool fetch url=("sftp://" . $SFTPserverAddress . "/" . $dir . "/" . $binname) port=$serverport user=$SFTPuser password=$SFTPpass src-path=$binname upload=yes } on-error={:log error message=("SFTP upload failed: " . $binname)}
/file remove $rscname
/file remove $binname
Fehlersuche¶
| Symptom / Logeintrag | Ursache(n) wahrscheinlich | Abhilfe |
|---|---|---|
SFTP upload failed: ... |
Falsche Zugangsdaten, falscher Port, Verzeichnis existiert nicht, Firewall blockiert | Zugangsdaten prüfen, Port/Reachability testen (/tool fetch ohne upload), Zielverzeichnis anlegen, egress-Firewall/NAT prüfen |
| Upload hängt/Timeout | MTU/Path-MTU, langsame/instabile Leitung, SFTP-Server limitiert | Testweise kleineres File hochladen; Server-Logs prüfen; QoS/MTU anpassen |
.rsc enthält keine Passwörter |
show-sensitive vergessen |
Genau wie im Skript verwenden: /export terse show-sensitive ... |
Dateiname sieht „komisch“ aus (z. B. 14sep2025) |
Erwartetes Datumslayout | Das ist Absicht: DDmmmYYYY (aus der RouterOS-Datumsausgabe zusammengesetzt) |
| Windows mag Dateinamen nicht | : im Zeitstempel |
Option 1 oben nutzen (ohne Doppelpunkte) |
Hinweise zur Wiederherstellung¶
- Konfig wieder einspielen (
.rsc):/import file-name=<datei>.rsc - System-Backup zurückspielen (
.backup):
Gerät-spezifisch (gleiches/ähnliches Modell empfohlen):/system backup load name=<datei>.backupAchtung: Ersetzt Gerätestand; für „bare metal“-Recovery gedacht.
Sicherheit: Schlüssel statt Passwort? (Anmerkung)¶
Das gezeigte Skript nutzt Benutzer/Passwort. Falls deine RouterOS-Version und SFTP-Server Schlüssel-Authentifizierung für fetch unterstützen, kannst du auf Key-Auth umstellen. Prüfe dafür die dokumentierten Parameter deiner konkreten ROS-Version und Umgebung.
Checkliste (Kurz)¶
- [ ] NTP/Zeit korrekt
- [ ] SFTP-Server erreichbar, Zielpfad vorhanden, Schreibrechte
- [ ] Variablen im Skript gesetzt
- [ ] Skript angelegt und Testlauf ok
- [ ] Scheduler aktiv
- [ ] Server-seitige Retention eingerichtet