Skip to content

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

  1. Initialisierung & Variablen
    Das Skript liest Systemidentität, Board-Modell, Datum und Zeit aus und baut daraus backupfilename.

  2. Konfig-Export
    /export terse show-sensitive file="$backupfilename" Erzeugt eine *.rsc mit kompakten Befehlen inkl. sensitiver Werte (z. B. Passwörter, PSK).

  3. Binäres Backup
    /system backup save name="$backupfilename" Erzeugt die *.backup für vollständige Wiederherstellung (Router-spezifisch).

  4. SFTP-Upload
    Zwei fetch-Befehle übertragen die Dateien an die Zieldestination.

  5. src-path="...local..." = Quelle auf dem Router
  6. url="sftp://server/dir/Zielname" = Ziel auf dem Server
    Bei Fehlern wird eine Log-Meldung mit SFTP upload failed: ... geschrieben.

  7. Lokales Aufräumen
    Nach erfolgreichem Upload werden beide lokalen Dateien gelöscht.

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

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

  2. Manuell testen /system script run AutoBackupToSFTP /log print where message~"Backup Script"

  3. 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"

  4. 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-sensitive exportiert Passwörter/Schlüssel — die .rsc enthä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 -delete via 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-Router statt Site 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>.backup

    Achtung: 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