Zatiaľ nie som pokročilým používateľom zariadení Mikrotik, čo dokazuje fakt, že terminál tam nepoužívam tak veľa ako webové rozhranie (alebo WebFig, ako ho nazývajú). Ale Mikrotik, ako výkonná platforma, mi môže pomôcť pochopiť, čo robím.

Jedna z vecí, na ktorú som nedávno prišiel, vyzerá zhruba takto:

  1. vykonám nejaké zmeny v konfigurácii routera (cez UI alebo terminál)
  2. exportujem konfiguráciu do ľudsky čitateľného súboru (nie binárneho)
  3. zacommitujem súbor do git repozitára pod rovnakým názvom
  4. pozriem sa, čo sa zmenilo

Tento prístup poskytuje nie jeden, ale aspoň dva prínosy:

  • konfigurácia môjho routera je bezpečne uložená pre prípad, že by sa niečo stalo
  • ľudsky čitateľný formát sú v skutočnosti samotné príkazy, takže sa môžem naučiť, ako ich volať

Sledovaním toho, aké príkazy sú uložené v konfigurácii, môžem s nimi experimentovať a možno sa raz stať pokročilým používateľom aj ja. Ako som to teda zautomatizoval?

SSH do Mikrotiku #

Aby sme zabránili skriptu pýtať sa na heslo, môžeme sa prihlásiť pomocou verejného SSH kľúča. Ten však musí byť najprv vložený do routera cez bežnú autentifikáciu heslom:

scp ~/.ssh/my-public-key.pub [email protected]:pubkey.txt

ssh [email protected]
/user ssh-keys import public-key-file=pubkey.txt user=username-i-chose

Pre úplnosť, dá sa to urobiť aj cez WebFig:

  1. Prejdite na System → Users
  2. Vyberte svojho používateľa
  3. Prejdite na záložku SSH Keys
  4. Kliknite na ’+’ a vložte svoj verejný kľúč

Poznámka: súbor s verejným kľúčom bude potom pravdepodobne odstránený zo súborového systému.

Skript #

Po vykonaní zmien jednoducho ručne spustím tento skript. Dalo by sa to zautomatizovať na periodické spúšťanie, ale nechcel som ešte viac kompromitovať bezpečnosť, takže som to zatiaľ nechal takto jednoduché:

#!/bin/bash

# Configuration
ROUTER_IP="192.168.1.1"
ROUTER_USER="username-i-chose"
FILENAME="config.rsc"

# Create backup and download using SSH key authentication
ssh $ROUTER_USER@$ROUTER_IP "/export file=$FILENAME"
sleep 2
scp $ROUTER_USER@$ROUTER_IP:$FILENAME "$FILENAME"

# Add and commit if there are changes
git add "$FILENAME"
if git diff --staged --quiet; then
    echo "No changes to commit"
else
    git commit -m "update config"
    git push origin main  # Assuming 'main' branch and 'origin' remote is set up
fi

Poznámka: vyžaduje to na používateľovi routera dosť veľa oprávnení, takže ste boli varovaní. Užívajte!

Odkazy #