I will show you how to create a daily backup of your Mikrotik configuration. This uses ssh, bash, and systemd-timer.
The aim for this mini project is to be as simple as possible but it supports multiple target devices!
First of all, create the backup script (~/bin/mikrotik-backup.sh):
This script backs your Mikrotik up and then removes backups older than 90 days. You need to supply the device hostname and the directory where the backups will be saved.
#!/usr/bin/env bash
# Usage: ./mikrotik-backup <router-ip> <backup-dir>
ssh -4 $1 /export show-sensitive > $2/$1-$(date +"%Y%m%d%H%M%S").txt
find $2/ -name *.txt -type f -mtime +90 -exec rm '{}' \;
Then create your systemd oneshot service (~/.config/systemd/user/mikrotik-backup@.service):
This unit works with the ~/mikrotik_backup/ destination directory.
[Unit]
Description=Back the Mikrotik up
Wants=mikrotik-backup@.timer
[Service]
Type=oneshot
ExecStart=%h/bin/mikrotik-backup.sh %i %h/mikrotik_backup/
[Install]
WantedBy=multi-user.target
Lastly the systemd timer needs to be created (~/.config/systemd/user/mikrotik-backup@.timer):
The timer will be executed every day at 3:15.
[Unit]
Description=Back the Mikrotik up
Requires=mikrotik-backup@.service
[Timer]
Unit=mikrotik-backup@%i.service
OnCalendar=*-*-* 03:30:00
[Install]
WantedBy=timers.target
SSH
This script needs to be able to ssh to the Mikrotik automatically, e.g. try ssh gw.local /system/routerboard/print and it should not require any other input.
If your username differs from the Mikrotik’s username, just create ~/.ssh/config file with:
Host *.local
User MikrotikAdmin
Enablement
To backup
gw.localmachine, just run:systemctl --user enable --now mikrotik-backup@gw.local.timerYou can inspect the timers by:
systemctl --user list-timersTo see if the script ended successfully, run:
systemctl --user status mikrotik-backup@gw.local.service
And that’s it!