Update vom 24.09.2024:
Das Update-Skript löste beim Versionssprung von „7.15.3“ zu „7.16“ nicht aus, da die dritte Stelle in der Version fehlte (7.16.0) fehlte.
Logik angepasst, es wird intern immer eine „.0“ angehangen.
Dieser Artikel beschriebt, wie man Mikrotik-Geräte von Windows aus automatisiert updaten kann.
Ich habe mich mit der Möglichkeit Ansible dafür einzusetzen nicht weiter beschäftigt.
Vor einigen Jahren klappte es damit noch nicht, aber vielleicht hat sich das inzwischen geändert (gerne ein Kommentar dazu!).
Das hier vorgestellte Konzept besteht aus drei (vier) Schritten:
- Host-Keys für die SSH-Verbindung importieren
- Das eigentliche Update-Skript auf den Mikrotik-Geräten anlegen
- Das Skript aus Schritt 2 remote auslösen
- (Optional: Bootloader automatisch aktualisieren lassen, zweiter Reboot)
Vorarbeit, Schritt 1
Host-Keys importieren (plink.exe wird benötigt), eine .bat-Datei (z. B. mikrotik_update_hostkey-import.bat) anlegen, mit diesem Inhalt:
@echo off set devices=10.10.10.1 10.10.10.2 10.10.10.3 set user=mt-username set pass=mt-passsword for %%i in (%devices%) do ( echo y | "C:\plink.exe" -ssh -l %user% -pw %pass% %%i exit ) echo Host keys successfully stored. pause
- IPs der Mikrotik-Geräte anpassen
- Mikrotik Username und Passwort eintragen
- Ort der plink.exe anpassen
Dieses Skript meldet sich mit den Zugangsdaten einfach nur bei den Mikrotik-Geräten an. Das sorgt dafür, dass die Host-Keys bestätigt werden müssen (y) und damit importiert werden. Dieser Schritt muss einmalig ausgeführt werden, bzw. dann, wenn ein neues Mikrotik-Gerät dazu kommt. Man könnte die Keys auch manuell importieren, indem man sich mit jedem Gerät einmal über putty (per SSH) anmeldet.
Wichtig ist nur, dass die SSH-Host-Keys aller Mikrotik-Geräte (die später automatisch geupdatet werden sollten) hier in der Registry liegen:
HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
Der Weg *wie* die Keys dort hingelangen ist egal, es wäre auch möglich die Keys manuell in der Registry anzulegen oder sie zu importieren, ohne dass die .bat-Datei jedes Mal ausgeführt werden muss. Ich habe leider keine Möglichkeit gefunden, dass plink die Host-Keys wie erhalten ohne Bestätigung akzeptiert (was im eigenen LAN akzeptabel wäre).
Vorarbeit, Schritt 2
Das eigentliche Update-Skript auf den Mikrotik-Geräten anlegen (System -> Scripts):
Name des Skripts: initiate_update
:log info "Checking for updates..." :do { /system package update check-for-updates } on-error={ :log error "Failed to check for updates. Please ensure the device is connected to the internet." :exit } :local installedVersion [/system package update get installed-version] :local latestVersion [/system package update get latest-version] :if ([:len $latestVersion] = 0) do={ :log error "Could not retrieve the latest version. Please try again later." :exit } :log info ("Installed version: " . $installedVersion) :log info ("Available version: " . $latestVersion) :local installedVersionFull ($installedVersion . ".0") :local latestVersionFull ($latestVersion . ".0") :if ($latestVersionFull > $installedVersionFull) do={ :log info "New firmware version available. Starting firmware download..." :do { /system package update download } on-error={ :log error "Firmware download failed." :exit } :log info "Firmware download completed successfully. Waiting 120 seconds..." :delay 120 :log info "Rebooting..." /system reboot } else={ :log info "Installed firmware is up to date. No update required." }
Die Update-Skripte werden später parallel gestartet! Wenn 60 Sekunden Delay für den Download des Updates nicht reichen, bitte erhöhen! Die Zeit muss so bemessen sein, dass auch das langsamste Gerät noch sein Update vollständig herunterladen kann bis der Reboot ausgelöst wird (angenommen eines der Geräte ist der WAN-Router oder ein Switch). In kleinen Umgebungen sollten 60 Sekunden reichen, 300 Sekunden sollten selbst in großen Umgebungen mehr als ausreichend sein.
Dieser Schritt muss auch nur einmalig ausgeführt werden, bzw. dann, wenn ein neues Mikrotik-Gerät dazu kommt.
Update auslösen
Das angelegte Mikrotik-Skript automatisch auslösen, eine .bat-Datei (z. B. mikrotik_update.bat) mit diesem Inhalt anlegen:
@echo off set devices=10.10.10.1 10.10.10.2 10.10.10.3 set user=mt-username set pass=mt-passsword set script_name=initiate_update for %%i in (%devices%) do ( start "" /min "C:\plink.exe" -ssh -batch -l %user% -pw %pass% %%i "/system script run [find name=%script_name%]" >nul 2>&1 )
- IPs der Mikrotik-Geräte anpassen
- Mikrotik Username und Passwort eintragen
- Ort der plink.exe anpassen
Zukünftig reicht es nur diese Batchdatei zu starten! Es werden SSH-Verbindungen zu den Mikrotik-Geräten aufgebaut und das Update-Skript ausgelöst.
Haben Sie eine Anmerkung oder Vereinfachung dazu? Schreiben Sie gerne einen Kommentar.
Erweiterung um automatisches Bootloader-Update
Wenn die „Firmware“ (Bootloader) der Mikrotiks ebenfalls automatisch in diesem Zuge geupdatet werden sollte (sichtbar unter: System -> RouterBOARD), das folgende Skript im Scheduler (System -> Scheduler) eintragen:
Name: UpgradeFirmware
Start Time: startup
:if ([/system routerboard get current-firmware] != [/system routerboard get upgrade-firmware]) do={ /system routerboard upgrade :delay 1000ms /system reboot }
Und die Option „Auto Upgrade“ unter: System -> RouterBOARD -> Settings anhaken:
Diese Option impliziert zwar ein „automatisches Upgrade“, sorgt aber nur dafür, dass der neue Bootloader bei einem Systemupdate installiert wird. Den final benötigten Reboot muss man aber selbst (oder über das Skript oben) veranlassen.
Weitere Möglichkeiten
Wenn Sie die Geräte gestaffelt oder in Gruppen updaten möchten (z. B. wenn das Netzwerk für ein Update nicht komplett „down“ sein darf), legen Sie einfach eine zweite Batch-Datei an und definieren darin die Geräte. Je nachdem wann Sie welche Batchdatei ausführen, werden nur diese Geräte geupdatet. Es wäre auch möglich über das „Delay“ (in den Skripten auf den Mikrotiks selbst) eine zeitliche Staffelung zu erreichen.
Referenzen:
- Download: plink.exe
- https://help.mikrotik.com/docs/display/ROS/RouterBOARD#RouterBOARD-UpgradingRouterBOOT
System- und Netzwerkadministrator
Informationstechnik – Netzwerktechnik – Consulting
MCSA+M | MCSE | MTCNA