Backup der Konfiguration eines UniFi CloudKeys
Der UniFi CloudKey kann in regelmäßigen Abständen die aktuelle Konfiguration auf ein lokales Medium (SD-Karte) sichern. Diese Sicherungen liegen jedoch immer noch auf dem CloudKey, also kein richtiges Backup. Mit einem einfachen Skript können diese Dateien auf einen "Backupserver" kopiert werden.
Vorbereitung auf dem CloudKey
Am CloudKey via SSH ubnt@CLOUDKEY-IP oder admin@CLOUDKEY-IP (Passwort ist dasjenige welches beim Einrichten vergeben wurde) anmelden und folgende Befehle ausführen um den SSH-Key des Backupbenutzers zu hinterlegen:
[user@host:~]$ ssh admin@CLOUDKEY-IP
root@UniFi-CloudKey:~$ mkdir .ssh
root@UniFi-CloudKey:~$ cd .ssh
root@UniFi-CloudKey:~$ echo "ssh-rsa xyz..." >> authorized_keys
root@UniFi-CloudKey:~$ exit
# Test
[user@host:~]$ ssh -i /PATH/TO/id_rsa admin@CLOUDKEY-IP
root@UniFi-CloudKey:~$ exit
Backupserver
Konfiguratoinsdatei anlegen
Die Konfigurationsdatei für das eigentliche Backupskript kann unter /etc/ubnt-ck-backup.cfg oder im home-Verzeichnis (/home/USER/.ubnt-ck-backup.cfg) des Benutzers als versteckte Datei angelegt werden:
#!/bin/bash
# Where to find the private SSH_KEY
SSH_KEY="/root/rsnapshot-ssh/id_rsa"
# User to login at the CloudKey (ubnt or admin )
TRGT_USER=ubnt
# IP- of the CloudKey
TRGT_IP="xxx.yyy.zzz.aaa"
# The directory to backup - this you have to check
SRC_DIR="/srv/unifi/data/backup"
# The directory for saving the files
TRGT_DIR="/storage/tmp/"
# HO long should we keep the files
RETENTIONTIME=14
Das Skript
Leider ist auf dem UniFi Cloudkey kein rsync installiert, so dass nur via scp gesichert werden kann. Das bedeutet, dass immer nur neue Dateien hinzukommen. Um die Menge der Dateien nicht zu groß werden zu lassen kann über die Variable RETENTIONTIME angegeben werden ab welchem Alter Dateien gelöscht werden sollen.
#!/bin/bash
function set_config {
if [ -r /etc/ubnt-ck-backup.cfg ]; then
# Check if configuration is found in /etc. If yes set configvar
BACKUPCFG=/etc/ubnt-ck-backup.cfg
elif [ -r ~/.ubnt-ck-backup.cfg ]; then
# If config is found in the backupuser home directory set it into the configvar
BACKUPCFG=~/.ubnt-ck-backup.cfg
else
echo "No configuration file is found, please create one" | /usr/bin/logger -s -i -t "Unifi CloudKey BackuP"
exit 1
fi
}
function run_backup {
scp -i $SSH_KEY -r $TRGT_USER@$TRGT_IP:$SRC_DIR $TRGT_DIR
}
function check_preq {
if [ -d $TRGT_DIR ]; then
RUN=TRUE
else
mkdir $TRGT_DIR
fi
}
function clenaup {
if [ $RETENTIONTIME -gt 0 ]; then
find $TRGT_DIR -mtime +$RETENTIONTIME -delete
fi
}
function main {
set_config
source $BACKUPCFG
check_preq
run_backup
cleanup
}
main
Getestet wurde das Skript mit einem CloudKey der ersten Generation und mit ein paar wenigen Anpassungen der Konfiguration auf einem CloudKey der zweiten Generation.