Консольная оболочка nsgsh представляет собой пользовательский интерфейс к демону nsgconfd, предназначенный для управления устройством в режиме командной строки. nsgsh устанавливается в качестве единственно доступной командной оболочки для пользователя nsg и для всех дополнительных пользователей при подключении через Telnet, SSH или консольный порт. Интерактивная работа пользователя в nsgsh подробно описана в общей части данной справки.
nsgsh может быть запущена из bash в интерактивном режиме (без параметров, либо с ключом -i) или в пакетном режиме. При запуске в пакетном режиме операндами команды являются узлы меню, вплоть до значения конечного параметра. Список команд, доступных в каждом узле, можно просмотреть по нажатию одной лишь клавиши Enter
в интерактивном режиме; важно помнить, однако, что он может формироваться динамически.
ВНИМАНИЕ! При исполнении nsgsh из-под bash запускается отдельная сессия пользователя root, на которую распространяются общие правила открытия сессий для nsgsh и Web-управления. В частности, если в этот момент на устройстве уже имеется сессия со статусом администратора, а скрипт также содержит команды, для которых требуются права администратора, то возникает конфликт между ними. Грубые способы разрешения этого конфликта — по принципу "если не ты — то тебя", как принято в нашем животном мире. Либо скрипт не будет исполнен из-за отсутствия необходимых прав доступа, либо перед его исполнением следует принудительно завершить сессию администратора:и потерять при этом все сделанные, но не сохранённые изменения.nsgsh .system.sessions.close=admin; nsgsh опции команды ...
Более щадящий выход предлагается опцией --force (см. ниже).
Формат командной строки:
nsgsh опции путь.параметр=значение [[путь.параметр=значение] ... ]
При вызове без каких-либо опций и параметров nsgsh запускается в интерактивном режиме.
Опции командной строки:
ssh nsg@1.2.3.4 "_p" ssh nsg@1.2.3.4 ".ip.route.show" ssh nsg@1.2.3.4 ".port.m1.restart"
Обязательным параметром данной опции является максимальное время выполнения скрипта, в секундах. По истечении этого времени сессия скрипта, если она ещё не завершилась штатным образом, будет безусловно завершена. Это защита от ситуаций, когда возможная ошибка в скрипте могла бы лишить администратора доступа к устройству на неограниченное время.
restart
для портов, туннелей и т.п. доступны в режиме read-only, поскольку не затрагивают конфигурацию устройства.Помимо команд, выводимых подсказкой Enter
в каждом узле, nsgsh имеет также три специальные команды. Они недоступны для работы в интерактивном режиме и работают только при пакетном запуске nsgsh из-под bash. (Что, в свою очередь, доступно вручную только для пользователя root.) Команды информационные и не требуют для nsgsh прав администратора. Они могут быть полезны в скриптах:
.system.get-iface-name=имя_порта
ip route add default dev $(nsgsh -q .system.get-iface-name=m1)
.port.имя.get-port-parms
.system.getTty=имя_порта
.port.имя.get-port-parms
, но выводит только системное имя порта в формате текстовой строки, а не таблицы Lua.При запуске nsgsh из-под bash следует обратить внимание на следующие особенности:
Спецсимволы. К перечню спецсимволов nsgsh, которые требуют указания особым образом, добавляются спецсимволы bash ($ > < | & ` и т.п.) — в путях, параметрах и значениях. Символ / в данном случае специальным не является.
Вызов с несколькими операндами. Если вводятся сразу несколько операндов, они разделяются пробелами; в этом случае nsgsh отрабатывает последовательно каждый операнд как отдельную команду, независимо от результатов исполнения предыдущей. Пример вызова:
nsgsh .port.eth0.link.adm.down .port.eth0._apply .po.eth1.li.ad.u .port.eth1._a
Применение изменений. Изменения параметров автоматически не применяются ни в пакетном режиме, ни в интерактивном. Чтобы они вступили в силу, необходимо завершить командную строку командой _apply в нужном узле, например:
nsgsh .port.3g.main.attempts.1 .port.3g.aux.attempts.0 .port.3g._apply
Разовые команды исполняются немедленно и не требуют завершающего _apply.
ВНИМАНИЕ! При написании скриптов необходимо учитывать алгоритмы работы bash и двойной разбор esc-последовательностей: сначала в bash, потом в nsgsh. Пример:Последовательность \. преобразуется bash в точку, и в nsgsh передаётся# nsgsh .port.eth0.vlan.eth0\.101._printДалее каждый узел в указанном пути разрешается в полное имя:# nsgsh .port.eth0.vlan.eth0.101._printузел 101 оказывается лишним, и в результате выдаётся ошибка. Правильная нотация:port → port eth0 → eth0 vlan → vlan eth0 → eth0.101 (если он единственный)Другой пример:# nsgsh .port.eth0.vlan.eth0\\\.101._printВ этом случае nsgsh получит .port.eth0.vlan.eth0\\\.101\(_apply и _print\) как два последовательных операнда (и оба некорректные, с непарными скобками). Правильная нотация — необходимо закрыть пробел между ними:nsgsh .port.eth0.vlan.eth0\\\.101\(_apply _print\)nsgsh .port.eth0.vlan.eth0\\\.101\(_apply\ _print\)
Обязательные и необязательные значения для команд. Если разовая команда требует подтверждения, то при исполнении её в пакетном режиме необходимо ввести это подтверждение в конце операнда, например:
nsgsh .system.reboot.yes
Это же относится и к некоторым другим случаям, когда команда может требовать какого-либо ввода — например, для рестарта сотового интерфейса:
nsgsh .port.m1.restart.main
В данном случае ввод параметра предусмотрен, но для интерактивного режима он не является обязательным. Рестарт порта 3G можно выполнить с явным выбором той либо другой SIM-карты, либо с текущей в зависимости от настроек самого порта. При вызове таких команд в пакетном режиме необходимо всегда указывать параметр явным образом: либо одно из возможных значений (main или aux), либо ключевое слово nil для того, чтобы выполнить команду с пустым значением параметра.
Ограничения на исполнение отдельных команд. Некоторые команды (например, создание резервной копии конфигурации и её выгрузка на удалённый сервер) требуют значительного времени для исполнения и по этой причине их исполнение в пакетном режиме запрещено. При попытке выполнить такую команду выводится соответствующее диагностическое сообщение.
Обойти это ограничение, будучи твёрдо уверенным в своих действиях, можно путём принудительного вызова nsgsh в интерактивном режиме, например:
nsgsh -i system.configurations.etc-store=file:///tmp/backup.tgz _quit
однако в этом случае автор скрипта принимает на себя все возможные последствия в виде, например, потери отзывчивости системы на время исполнения команды.
© Network Systems Group 2015–2024 | Отдел документации |