Když už tady řešíme backup konfigurace, tady je moje troška do mlýna. Tímto scriptem pravidelně skrze cron obíhám všechny mikrotiky (tedy, všechny kromě toho domácího, abych byl přesný) a stahuji konfiguraci. Vytváří se adresářová struktura se jménem routeru a následně pod ním strom se zálohami. Je to dobré na archivaci a sledování změn.
Na routerech mám vytvořeného uživatele backup (viz $BACKUP_USER), pod kterým se tam script hlásí. Má omezené přihlášení pouze z IP adresy zálohovacího serveru a nastavené silné heslo, které jsem zahodil, aby se tam na něj nikdo nehlásil heslem, ale pouze přes SSH klíče. Do routerů je přidaný veřejný SSH klíč uživetele, pod kterým na serveru ten script běží.
Šlo by to ještě vylepšit v tom smyslu, že seznam routerů a jejich adres nebude součástí scriptu, ale bude v nějakém souboru. Zálohovací script si ho pak načte, rozparsuje a takto získané informace použije.
backup_rb.sh:
#!/bin/bash
SSH=/usr/bin/ssh
SCP=/usr/bin/scp
BACKUP_USER=backup
BK_TO=/srv/backup/mikrotik
#===============================================================================
function backup_router
{
IDENT=$1
IP=$2
BK_FILE=${IDENT}_`date +%Y%m%d_%H%M`
BK_PATH=${BK_TO}/${IDENT}
DATE_DIR=`date +%Y/%m`
echo $IDENT:
mkdir -p ${BK_PATH}/${DATE_DIR}
$SSH ${BACKUP_USER}@${IP} /system backup save dont-encrypt=yes name=${BK_FILE}
$SSH ${BACKUP_USER}@${IP} /export file=${BK_FILE}
$SCP ${BACKUP_USER}@${IP}:${BK_FILE}.backup ${BK_PATH}/${DATE_DIR}/
$SCP ${BACKUP_USER}@${IP}:${BK_FILE}.rsc ${BK_PATH}/${DATE_DIR}/
$SSH ${BACKUP_USER}@${IP} /file remove ${BK_FILE}.backup
$SSH ${BACKUP_USER}@${IP} /file remove ${BK_FILE}.rsc
rm -f ${BK_PATH}/${IDENT}_latest.backup
rm -f ${BK_PATH}/${IDENT}_latest.rsc
cp ${BK_PATH}/${DATE_DIR}/${BK_FILE}.backup ${BK_PATH}/${IDENT}_latest.backup
cp ${BK_PATH}/${DATE_DIR}/${BK_FILE}.rsc ${BK_PATH}/${IDENT}_latest.rsc
}
#================================================================================
backup_router jmeno_routeru1 addr_routeru1
backup_router jmeno_routeru2 addr_routeru2
# atd.
Na zálohovacím serveru musí být v ~/.ssh/known_hosts veřejné SSH klíče těch routerů. Na snadnější naplnění používám následující script. Současně slouží k ověření, že sá do všech zařízení přes SSH automaticky přihlásit.
check_rb_login.sh:
#!/bin/bash
SSH=/usr/bin/ssh
USER=backup
#===============================================================================
function login_to_router
{
IDENT=$1
IP=$2
echo $IDENT:
$SSH ${USER}@${IP} /system identity print
}
#================================================================================
login_to_router jmeno_routeru1 addr_routeru1
login_to_router jmeno_routeru2 addr_routeru2
# atd.
Tímto způsobem lze budovat bázi konfigurací všech prvků sítě, což je zvlášť užitečné pro disaster recovery většího množství zařízení. Něco se podělá, sahnu pro poslední konfiguraci, nam*dám ji tam přes restore, podle potřeby před tím udělám factory reset nebo netinstall a není co řešit.
Třeba to bude někomu k užitku.