scli: набор утилит командной строки для управления SNMP устройствами

Проект "Пакет дня" нуждается в помощи переводчиков. Если Вы можете помочь с переводом статей, пожалуйста, присоединяйтесь!

Оригинальная статья: pipitas
Перевод: seas

Вот набор задач, ежедневно встающих перед многими из нас….
Устанавливаешь Laserjet драйвер для новенького принтера Lexmark, который прикупил твой босс, но не знаешь, пришел-ли он с установленным PostScript модулем или поддерживает только PCL?
Вдруг нужно узнать, что светится на LCD дисплее на принтере в том конце холла, но слишком занят или лень сходить и посмотреть.
Тебе опять звонит кто-то и надоедает: “Мой HP опять заклинило; я вытащил бумагу, но эта красная лампочка все равно постоянно мигает!”?

Используйте scli.

scli - это инструмент для запуска “командного интерфейса SNMP”. Я очень часто использую эту малоизвестную консольную утилиту для самых разнообразных задач.

Обзор:

scli подсоединяется к любому, поддерживющему SNMP, сетевому узлу и позволяет интерактивно "просматривать" параметры, сохраненные в базе данных устройства (так называемом, ”MIB”, База Данных Управления устройством). Я, главным образом, использую эту утилиту для управления принтерами (поэтому и выбрал такие примеры), но scli может работать и со многими другими устройствами: мостами, маршрутизаторами, шлюзами, свичами, серверами и много еще чем. (Так-же имеется неинтерактивный режим для поддержки скриптов).

Для кого:
для тех, кто хочет узнать какие из принадлежащих им устройства видны в сети и что это за устройства (параметры)
дле тех, кто выполняет роль “удаленной службы поддержки” (на работе, для друзей, или просто дома)
для тех, кто просто интересуется возможностями SNMP и хочет узнать о доступных в сети устройствах
для тех, кто, можно сказать, знаком с “snmpwalk”, но не настолько, чтобы работать с ним не лазая постоянно в справку

Ссылки:
Upstream homepage
Screenshots
Documentation
Mailing List (Примечание: адрес на домашней странице scli не работает)

Детали для интересующихся:

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

По умолчанию, scli возвращает обычное текстовое ASCII сообщение. Для получения результата в XML виде вы можете указать “–xml” ключ. (XML может быть полезен если вывод дальше будет обрабатываться другой программой, а не читаться человеком).

Предположим, сетевой узел, который вас интересует доступен по ip-адресу 192.168.23.45. Запускаем программу вводя
scli 192.168.23.45

поддерживающие SNMP-протокол, устройства, обычно по умолчанию поддерживают “public” в качестве их “community name”, и если scli не видит community name в командной строке - пытается использовать “public”.

Вы спросите, что значит это community name? По сути - это очень слабый метод авторизации; в общем - пароль, общий для всех пользователей, но сами пользователи даже не различаются по имени. Более того, SNMP версии 1 даже не шифрует community name при передаче по сети! Да, это очень плохой метод защиты для большинства устройств, но это то, как сейчас, в реальной жизни, устроен SNMP мир вокруг нас. (SNMP v2 и v4 уже лучше, но еще не так распространены в выпускаемых устройствах).

Если все-же ваше устройство не такое открытое и вам посчастливилось узнать кодовое слово (community name), используйте его как еще один аргумент в командной строке:
scli 192.168.23.45 "community-name"

При удачном подключении, scli покажет вам приглашение его внутреннего интерпретатора:
scli >

Он сейчас в интерактивном режиме. Наберите “help”, чтобы увидеть доступные команды. Или “show system info” для того, чтобы узнать кто производитель устройства, и как называется модель. Я уверен, вы быстро найдете и более интересные для себя запросы.

У scli имеется очень хороший встроеный командный auto-completion (используя клавишу [TAB]). Наберите “show system [TAB] [TAB]” чтобы получить список доступных подкоманд, отличных от "info" что мы уже использовали. Увидите возможные варианты: devices info mounts processes storage. Это значит “show system storage” - еще один возможный вариант команды. Попробуйте!

Конечно, вы можете использоват “show system” и так [не вводя ни одной из подкоманд]. Это заставит scli запустить все эти подкоманды разом и вернуть сумму всех результатов.

То-же работает и “show [TAB] [TAB]” or “show”. Запустите и увидите полную SNMP информацию для устройства с которым вы сейчас работаете.

Несколько подсказок, которые помогут вам освоиться с scli:
Нужно помнить, что наиболее важная команда в scli - это “show scli command [TAB] [TAB]”.
Поначалу, наиболее используемой командой в scli, скорее всего, будет “show scli command tree”.
scli поставляется с очень хорошей документацией; обязательно посмотрите ее хотя-бы разок.
scli может возвращать результат в XML формате, если его запускать с параметром “–xml”.

scli доступен в Debian (stable, testing и unstable все содержат версию 0.2.12-2, тогда как experimental - 0.3.0-0.1). Если вы вдруг используете версию 0.3.0, не упустите возможность просканировать всю вашу сеть на наличие SNMP устройств. В интерактивном режиме (scli >), введите “run scli scan ”. Или запустите scli в командном режиме из shell, и введите: “scli -c ‘run scli scan ’” (адресом может быть что-то вроде 192.168.0.0/24 или 10.162.4.0/22). Эта команда сканирования одна из новых, появившихся в 0.3; она выведет список всех SNMP узлов, которые откликаются на кодовое слово (community name) “public”. Возможно, вы захотите закрыть эту дыру в безопасности…

scli написан профессором Juergen Schoenwaelder, одним из тех кто придумал SNMP протокол и написал RFC, описывающий его.

P.S.: Если вы все-же действительно хотите знать ответы на вопросы в начале - Ok, вот они:

Поддерживает-ли мой новый принтер PostScript?
kurt:~> scli 192.168.23.45 -c "show printer interpreters" | grep Description
Description: Lexmark PCL
Description: Lexmark PostScript
Description: Lexmark XL
Description: Lexmark PJL
Description: Lexmark Automatic Language Switching
Description: Lexmark NPAP

Таким образом, если видим “NPAP” — тогда и PostScript поддерживается. Будет просто напечатать на нем из CUPS…

Что сейчас светится на LCD дисплее на удаленном принтере?
kurt:~> scli 192.168.23.45 -c "show printer display"
PRINTER LINE TEXT
1 1 No Paper: Tray 4

Уууу, и вы еще спрашиваете почему эта штуковина не пашет с 2 часов…

Почему эта красная мигалка не прекращает мигать на том принтере?
kurt:~> scli 192.168.23.45 -c "show printer covers"
Printer: 1
Cover: 1
Description: Rear Door
Status: coverOpen

Printer: 1
Cover: 2
Description: Top Door
Status: coverClosed

Ну, это просто. Просто скажите тому чуваку “Закрой крышку сзади у принтера и будет тебе счастье.”