Skip to content

Releases: dsamsonov/megaconf

2.5

08 Jun 21:13

Choose a tag to compare

Release Notes

v2.4

Поддержка консоль-серверов (Moxa и аналоги)

Режим -M позволяет работать через консоль-серверы, где подключение двухстадийное: сначала авторизация на самом консоль-сервере, затем логин на устройстве за ним. Для устройства можно задать отдельные логин и пароль через --login-user / --login-pass. Megaconf сам будит «тихую» serial-линию, которая молчит до первого символа, и немедленно прекращает попытки при неверном логине — важно для портов, где повторный вход блокирует учётку.

Парольная SSH-аутентификация на всех версиях OpenSSH

Раньше автоматический ввод пароля требовал OpenSSH ≥ 8.4. Теперь работает на любой версии, включая OpenSSH 7.4 на RHEL/CentOS 7.

Порт на устройство в devices.db

Можно указать порт прямо в списке устройств: host:port, [ipv6]:port. Удобно когда разные устройства доступны на разных портах — например консоль-серверные порты (moxa:4001, moxa:4002).

Live-вывод

--live транслирует вывод сессии в реальном времени вместо одного блока в конце. Включается автоматически в режиме -M — при работе через консоль-сервер это особенно удобно.

Медленная вставка для serial-линий

-S / --slow отправляет ввод посимвольно с задержкой. Нужно для медленных консоль-серверов (Moxa на 9600 бод), где символы теряются при быстрой отправке.

Исправлено

Длинный вывод на JunOS (show version и т.п.) перестал зависать после первой страницы — пагинатор ---(more NN%)--- теперь распознаётся корректно. При подключении к устройству после обновления прошивки (изменился SSH host key) больше не нужно чистить known_hosts.


v2.5

Исправлен критический баг: команды терялись при push конфигурации

При работе через PTY (с v2.4) каждая команда вызывала два промпта вместо одного. Второй промпт оставался в буфере и немедленно «срабатывал» на следующей команде — megaconf отправлял команды быстрее, чем железо успевало их обрабатывать. Результат рапортовался как success, хотя часть команд просто не доходила. Особенно проявлялось при пуше конфигов с длинными строками — хэши паролей, SSH-ключи.

Пароли в debug-режиме

-d больше не печатает пароли открытым текстом в консоль. Вместо содержимого выводится <protected>. Актуально для всех режимов: SSH, Telnet, -M с двухстадийной аутентификацией.

Права на лог-файлы

Файлы -l, -J, -D теперь создаются закрытыми для других пользователей системы. Важно: вывод сессии нередко содержит секреты — хэши паролей, ключи из show running-config.

Выбор конца строки

--eol позволяет явно задать символ конца строки: lf (дефолт для SSH/Telnet), cr (дефолт для -M), crlf (с предупреждением — на большинстве устройств вызывает проблемы), auto (дефолт, выбирает сам по режиму). Полезно когда конкретное железо ведёт себя нестандартно.

2.2 version

28 May 20:21

Choose a tag to compare

v2.2
Новое

JSON-лог — флаг -J / --json-log пишет результаты в JSON-файл, ключ = имя устройства, значение {result: success/unsuccess, error (при неуспехе), out}. out (вывод сессии) присутствует всегда, в том числе у неуспешных устройств
Лог по файлу на устройство — флаг -D / --log-dir пишет каждое устройство в отдельный файл <имя>.log в указанном каталоге (каталог создаётся автоматически)

Исправлено

В причину ошибки неуспешного устройства теперь попадает вывод stderr ssh/telnet (Connection refused, Permission denied и т.п.) — раньше диагностика отбрасывалась и в отчёте был только бесполезный timeout
Быстрый отказ при закрытии соединения — если ssh/telnet завершился сразу (refused, отказ авторизации, сразу закрытая сессия), устройство возвращается мгновенно, а не ждёт полный таймаут
Повторная попытка (retry) теперь только на транспортных ошибках; при ошибке аутентификации повтор не делается (бессмысленно и приближает блокировку учётки)
При неуспехе сохраняется частичный вывод сессии (раньше отбрасывался)
Промпт больше не матчится ложно на строках-фрагментах маршрута вида 1.2.3.4> в выводе команд
Ctrl+C корректно завершает работу: дочерние ssh/telnet убиваются, лог-файл закрывается, итоговый отчёт по уже завершённым устройствам печатается (раньше os.Exit пропускал все эти шаги)
Изменившийся ключ хоста после обновления прошивки больше не ломает парольную аутентификацию — добавлен UserKnownHostsFile=/dev/null

Улучшено

SSH-пароль на уровне auth теперь действительно работает через SSH_ASKPASS (бинарь служит сам себе askpass-хелпером); требует OpenSSH ≥ 8.4 на клиенте. Раньше пароль уходил в stdin-пайп и до SSH-аутентификации не доходил
Вывод в параллельном режиме строго сериализован — баннеры подключения больше не вклиниваются в блок другого устройства
В debug-режиме принудительно -j 1, иначе сырой вывод нескольких горутин перемешивается

2.1 version

26 May 12:47

Choose a tag to compare

Changelog
v2.1
Исправлено

Команды теперь корректно выполняются на всех устройствах — в v1.0 была ошибка из-за которой команды иногда отправлялись дважды и зависали
Пагинация ---(more)--- на JunOS теперь обрабатывается корректно
SSH больше не зависает на устройствах где ключ хоста изменился после обновления прошивки

Новое

Telnet — поддержка через флаг -T / --telnet, по умолчанию SSH
Параллельная работа — флаг -j N для одновременного подключения к N устройствам
Inline команда — -C "sh ver" без файла команд
Прогресс — при запуске сразу видно к каким устройствам идёт подключение и сколько их
Итоговый отчёт — в конце выводится список успешных и неуспешных устройств с причиной ошибки
Буферизованный вывод — при параллельном режиме вывод по каждому устройству печатается целиком, не перемешиваясь
Retry — при ошибке подключения автоматически одна повторная попытка через 5 секунд
Лог в файл — флаг -l ./output.log пишет вывод одновременно в консоль и файл
Комментарии в файлах — строки начинающиеся с # в devices.db и commands игнорируются
Порт — -P меняет порт подключения (дефолт 22 для SSH, 23 для Telnet)
Таймаут — единый флаг -t для таймаута подключения и выполнения команд

Улучшено

Промпт определяется универсально — работает с Cisco, JunOS, Huawei VRP, MikroTik, Eltex, D-Link без настройки
Пагинация обрабатывается автоматически для всех вендоров (---- More ----, ---(more)---, [more 50%], )
ANSI escape-коды убираются из вывода (актуально для MikroTik)
Все настройки из ~/.ssh/config работают автоматически — IdentityFile, ProxyJump, Match и др.
SSH agent forwarding работает через SSH_AUTH_SOCK

1.0 version

21 Mar 17:45

Choose a tag to compare

some bug fixes

0.0.2

15 Mar 23:31

Choose a tag to compare

added username and VerboseWriter