- PVSM.RU - https://www.pvsm.ru -
Или как избавиться от страха нажать
/system reboot
Обновление MikroTik — та ещё боль. То не влезешь по SSH, то забыл сделать routerboard upgrade, то устройство «уходит в себя» и не возвращается. Особенно, когда устройств не одно, а десятки. Вручную это превращается в спорт на выносливость и крепкие нервы.
Я решил, что хватит. Написал скрипт на Python, который делает всю грязную работу за меня: подключается, проверяет обновления, ставит новые пакеты, делает routerboard upgrade и даже ждёт, пока устройство снова появится в сети. Главное — всё логируется и работает аккуратно, как системный администратор в хорошем настроении.
В этой статье:
Подробно разберём, как устроен скрипт.
Поговорим про SSH, логи, таймауты и тонкости MikroTik.
Приведу полный технический разбор Python-кода.
device = { "device_type": "mikrotik_routeros", "ip": ip, "username": username, "password": password
}
conn = ConnectHandler(**device)
check_output = conn.send_command("/system package update check-for-updates")
output = conn.send_command_timing("/system package update install")
if "Do you want to upgrade" in output: conn.write_channel("y
")
rb_info = conn.send_command("/system routerboard print")
if curr_fw != upg_fw: conn.send_command("/system routerboard upgrade", expect_string=r"[y/n]") conn.write_channel("y
")
📦 Полный код и инструкции доступны:
Аргументы CLI обрабатываются через argparse.
Netmiko используется для SSH-подключения (с поддержкой MikroTik).
Цветной вывод — с помощью colorama.
Все логи сохраняются в файл mikrotik_update.log.
Подключается к устройству.
Извлекает установленную версию /system package update print.
Проверяет наличие обновлений /system package update check-for-updates.
Если обновление есть, показывает версию, иначе пишет, что всё актуально.
Работает надёжно даже при медленных ответах — с повторами.
Проверяет наличие новой версии RouterOS.
Если есть — инициирует обновление через install.
Подтверждает y при необходимости.
Ждёт возвращения устройства после ребута.
Затем проверяет /system routerboard print:
Если upgrade-firmware > current-firmware, запускает апгрейд и ребут.
После каждого действия — лог.
Подключение и команды завернуты в try/except.
Все ошибки фиксируются в логах, включая таймауты и неполадки сети.
Ждёт возврата устройства после ребута, пингует и переподключается.
Максимальное время ожидания — 5 минут (настраивается).
# Проверка устройств из списка
python3 mikrotik_update.py --mode gather --file ip_list.txt --user admin
# Обновление одного IP
python3 mikrotik_update.py --mode upgrade --ip 192.168.88.1 --user admin
Пароль будет запрошен при запуске — не хранится нигде в файле.
Код PEP8-совместим.
Типизация (: str, : bool) добавлена для читаемости.
Архитектура модульная, можно дорабатывать под себя.
Нет хранения паролей.
Все действия логируются.
Последовательная обработка IP-адресов (без параллельных SSH-сессий).
P.S. Скрипт прошёл боевое тестирование на более чем 20 устройствах. Ни одно из них не стало кирпичом. Значит, всё работает. А главное — повторяемо.
Автор: Litlmidl
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/424132
Ссылки в тексте:
[1] GitHub: https://github.com/netscripor/update_mikrotik/
[2] Telegram: https://t.me/netscripor
[3] Источник: https://habr.com/ru/articles/924128/?utm_source=habrahabr&utm_medium=rss&utm_campaign=924128
Нажмите здесь для печати.