Как автоматизировать опрос маршрутизаторов с помощью скриптов?
Господа и дамы, доброго времени суток.
Довелось мне стать начинающим сетевиком по случайности (счастливой или нет — пока не понял) в одной довольно большой компании. Заранее предупрежу — опыт практически нулевой, поэтому возможны очевидные для бывалых и опытных ошибки в логике вопроса. Прошу не серчать.
Встала перед мной такая задача — во владении и управлении нашего отдела телекоммуникаций порядка 1000 маршрутизаторов, разбросанных в радиусе 200-300км, Cisco 2811 и Huawei S2700, за половиной из них стоит еще и по свитчу. Из ТЗ было выяснено, что необходимо выяснить конкретно за какими из маршрутизаторов стоят свитчи, сравнить с ведомостью. Такая, своего рода, инвентаризация. Физически, объехав точки, выяснить это, разумеется, не представляется возможным.
Из того, что дано: таблицы с пулами адресов всех маршрутизаторов, PuTTy и надежда начальника на мои прямые руки.
Ручное подключение рассматривалось изначально, но от монотонности и однообразия действий я начал сходить с ума уже в конце первого дня. Последовательность действий была такова — Через путти подключиться к маршрутизатору, командами запросить количество активных портов и количество машин в сети. Исходя из этого соотношения становилось понятно, если на маршрутизаторе один активный порт, а машин несеколько, то значит, что за ним стоит свитч. Смотришь потом ведомость — свитч в ней есть, значит все хорошо. Если свитча после маршутизатора нет, а в ведомости есть — плохо. Отмечаешь и пошел дальше. Вроде все просто и логично, пока не упираешься в общую цифру повторов этой комбинации действий.
После усердного поиска в том числе в иноязычном сегменте паутины, наткнулся на пост с вариантом написания скрипта вроде такого:
for /f %%i in (devices.txt) do c:\putty\plink.exe cisco@%%i -pw
P@55W0rD! -m command.txt >> log.txt
где в devices.txt хранятся все пулы в столбик, cisco — логин, P@55W0rD! — пароль, в command.txt команды в столбик (в моем случае две — show arp или display arp, show ip interface brief или display vlan brief, в зависимости, циска это или хуавей), log.txt это собственно файл для вывода всего необходимого. Закидываю в батник, запускаю. И, конечно же, если б это работало, то этого длинного поста не было. Не проходят команды, «Line has invalid autocommand» и все тут. Причем пулы из файла с девайсами выдергиваются корректно, хотя два текстовых файла были созданы один за другим, и логи пишутся.
А теперь, уважаемые знатоки, вопрос.
В комментариях у этого поста много критики, но вероятно тут мне сможете помочь? То, что я хочу сделать, вообще выполнимо? И если да, иду ли я правильным путем? Приму все конструктивные советы, адекватную критику и помощь.
Спасибо!
Чем больше знаю, тем лучше понимаю, как мало знаю.
Посоветую более подробно командовать plink-ом, а именно: указать аргумент -v, что-бы сообщения программы были по подробнее. Указать -l cisco, что бы уж точно логиниться как cisco. Не забыть указать протокол -telnet и порт -P 23 для точности желаемого коннекта.
Итого:
@echo off
for /f %%i in (devices.txt) do (
echo Fetching data from %%i...
c:\putty\plink.exe -telnet -P 23 -l cisco %%i -pw "P@55W0rD!" -m command.txt -v >>log.txt 2>&1
)
Хотя с другой стороны, все эти данные - это чистый SNMP. Программ для сбора SNMP-данных с оборудования - гора и маленькая тележка, надо только выбрать удобную.
AUser0, спасибо за совет с SNTP, но я все-таки рассматриваю данные мне условия, да и использование скрипта в этом случае - моя идея, так что попробую предложенное выше и сообщу об эффекте. Только можно поподробнее расписать что в последней строке? -P 23, 2>&1 - что это? И могу ли я заменить telnet на ssh?
Ааа, ээээ, серьёзно? Я же написал, -P 23 значит "порт 23", что является стандартным портом для протокола telnet.
Заменить -telnet на -ssh конечно можно, если устройство, к которому происходит соединение, его поддерживает, и у вас есть такой доступ. При этом порт должен быть заменён на стандартный для SSH 22-ой порт. Ну или какой-то другой, прописанный в роутере.
Ну и 2>&1 означает "не выводить все ошибки в STDERR (на экран), а отправлять их в файл log.txt".
AUser0, про порт да, не заметил. А так - впервые сталкиваюсь с этим, предупреждал. В любом случае - не прокатило, видимо из-за того, что подключаюсь удаленно с домашнего компа к рабочему и система безопасности путти требует доп подтверждение.
AUser0, да, но в логах выходит запрос на подтверждение и на этом все стопорится.
Я тут порылся в настройках китти, и похоже нашел более простой выход. Там и авто-логин, и команды для выполнения можно запихнуть, только проблема осталась, чтобы китти на автомате подхватывала айпишники из текстового файла. Нет идей как это сделать?
У меня есть программа, которая может телнетом цепляться к циске, сгружать с нее таблицы ARP, сопоставлять их и рисовать схему сети с помощью graphviz. Могу исходники отдать, сейчас нет ресурсов на доработку. Лицензия MIT.