Выполнение консольных команд на MikroTik из ярлыка на рабочем столе.

Автор: Administrator вкл. . Опубликовано в MikroTik

Иногда нужно отправить одну конкретную команду (или пару) на маршрутизатор, а для этого, по большому счету, нет необходимости запускать терминал или winbox, либо нецелесообразно на это тратить время. Также для обычных пользователей данное действие может вызвать сложности (представьте, как вы объясняете процедуру запуска терминала cmd и ввода команды для пинга ya.ru, например. А если это уже ssh?).

 Конкретно мне понадобилось периодически перезагружать USB-модем, подключенный к микротику, по питанию. Да, можно это скриптами различной степени извратности делать (в некоторых случаях я их успешно применяю), но в описываемом случае я находился в шаговой доступности от роутера и определение времени для разрыва сессии с 4G-провайдером с последующим ее перезапуском определялось по личным ощущениям от интернет-серфинга.

Для реализации задуманного, нужно проделать следующее:

1.Заводим нового юзера на микротике (если вообще не принципиально, то используем стандартную админскую учетку, у нее права есть на все). Группа должна быть Write или любая другая, новосозданная, но с разрешением в политиках на write (в данном примере testuser).

2. Заходим через putty по ssh на микротик (Естественно SSH должен быть включен) юзером testuser. Проверяем достаточность прав на выполнение команды system routerboard usb power-reset duration=15 Если прав достаточно, то модем, подключенный к USB-порту микротика будет обесточен на 15 секунд.

Если прав не достаточно, то об этом в терминале так и будет написано not enough permissions (9) , в таком случае возвращаемся к п.1.

3. В программе Putty нужно создать новую сессию и сохранить ее под именем «OmniTik_TEST» т.к. подопытный у меня OmniTik. Необходимо указать IP-адрес микротика, протокол SSH, порт (22 обычно), имя сессии и нажать кнопку «Save». Таким образом при следующем запуске Putty можно будет выбрать сохраненную сессию из общего списка, нажать кнопку «Load» и все необходимые поля заполнятся введенными ранее данными. Останется нажать кнопку «Open» и в открывшемся окне терминала начнет устанавливаться подключение к указанному хосту.

4. Теперь добавим в сохраненную сессию еще немного настроек для большей автоматизации процесса подключения и снова сохраним сессию.

В ветке «Connection - Data», в строке «Auto-login username» пишем имя пользователя, специально созданного ранее – «testuser». В ветке «Connection - SSH», в строке «Remote command:» пишем необходимые для отправки на микротик команды. Между собой команды разделяются точкой с запятой без пробелов.

Для начала можно попробовать такую - log error message="TEST!";

Возвращаемся в ветку «Session» и жмем кнопку «Save», таким образом все новые настройки сохранены в, уже созданную ранее, сессию.

5. Запустим сессию «OmniTik_TEST» либо двойным нажатием на нее в окне Putty, либо по кнопке «Open».

В окне терминала откроется сессия SSH уже сразу с именем «testuser», о чем будет свидетельствовать соответствующее сообщение - «Using username ”testuser”». Вводим пароль для этого пользователя, успешно входим в микротик. Попутно в логах наблюдаем появление нашего сообщения «TEST!». Вроде работает отправка команды ПОСЛЕ авторизации пользователя. Т.е. команда отправляется ПОСЛЕ ввода пароля пользователя.

Хорошо, запомним.

(на скринах на обращайте внимания на ошибки авторизации в логах, это я просто чуть-чуть забыл пароль.)

6. А вот чтобы не вводить пароль руками, нужно сделать еще некоторое количество манипуляций.

Создаем ярлык на рабочем столе (или где удобно) на файл «putty.exe». В свойствах ярлыка (у меня это putty -test), в строке «Объект:» после putty.exe добавляем « -load OmniTik_TEST -pw test». Это означает загрузить сессию с именем «OmniTik_TEST» и использовать пароль «test». Нажимаем «Применить» и «ОK».

Целиком строка у меня выглядит так: D:\DISTR\putty.exe -load OmniTik_TEST -pw test

Сам putty.exe у меня лежит в D:\DISTR

               

7. Теперь при запуске ярлыка «putty -test» откроется окно терминала, автоматически установится SSH-соединение, автоматически введется пароль и окно терминала останется висеть, пока мы его не закроем. В логах микротика мы увидим отправленную команду «TEST!».

В общем-то минимальная функциональность для решения поставленной задачи (отправить команду(ы) на микротик одним кликом) уже есть, и задача решена. Но можно сделать некоторые улучшения.

Если строка с командой будет выглядеть вот так:

log error message="TEST!";delay 10;quit;

То окошко терминала само будет закрываться по истечении 10 секунд.

Еще можно сделать псевдо-обратную связь после отправки команды. Т.е. можно увидеть запрограммированное сообщение в терминале, что будет означать, что команда отправлена и выполнена. Это в основном нужно для юзеров, чтобы они видели результат (псевдо-результат) их действий, да и просто информативно.

Та же простая команда log error message="TEST!"; может быть отображена не только в логе микротика, но и во всех его терминалах (Telnet, SSH). Для этого нужно в микротике дать команду system logging add action=echo topics=error , либо сделать это же в винбоксе.

Теперь при запуске магического ярлыка putty в окне терминала будет виден текст «TEST!», что даст понять об успешности действия без необходимости просмотра логов микротика.

Если сделать это с вариантом авто-закрытия окна терминала, то echo-сообщение видно не будет и окно просто закрывается, повисев немного, т.к. выполняемые команды не отображаются в терминале до окончания строки команд в настройках putty. Иными словами, пока строка команд поочередно не закончит выполняться, терминал висит черным окном, даже delay в разных местах между командами не дает желаемого эффекта. В общем, если надо сообщение в терминале выводить, то без авто-закрытия.

Для своей текущей задачи я использую строку команд /system routerboard usb power-reset duration=10;log error message="USB Power Reset is OK!"; и окошко терминала остается висеть с сообщением «USB Power Reset is OK!».

Пока мне этого достаточно.

Пользоателю такой ярлык (или ярлыки) может пригодится для принудительного включения/выключения ограничения доступа в интернет определенного компьютера\планшета\телефона (контроль над ребенком). По скриптам или расписанию все настроено, но бывают случаи, когда надо изменить состояние правил фаерволла в произвольный промежуток времени.

Команды можно отправлять любые, т.е. перезагружать сам микротик, переключать маршруты, включать-выключать wi-fi и т.д..

А еще можно давать команду на запуск скрипта, а уж в самом скрипте можно напихать чего угодно.

/system script run "Имя_нужного_скрипта"