Я пытаюсь получить информацию с помощью команды «показать mac-адрес» из набора из 12 коммутаторов procurve в 2 разных местах, все подключенных через оптоволоконный PTP. Я хочу импортировать это в SQL для некоторых запланированных отчетов о статистике, движении, маршрутах и т. Д. Мне удалось сгенерировать некоторые очень интересные и полезные данные, которые в конечном итоге позволят мне превратить этого монстра, которого я унаследовал, в меньшее количество монстра, которого он является.
У меня есть все компоненты этой работы, кроме того факта, что я должен вручную собирать данные для каждого переключателя с помощью замазки, сохранять их в каталоге, где запланированная задача форматирует дампы в csv, очищает их и импортирует с помощью BULK INSERT.
Теперь я хочу автоматизировать получение данных с переключателей, чтобы я мог сосредоточиться на стороне данных и перестать тратить так много времени на стороне сбора.
Я пробовал PLINK, однако, похоже, есть какая-то проблема с эмуляцией, когда данные интерпретируются как неправильный формат, и я получаю файлы, полные тарабарщины.
с помощью...
plink -batch -ssh -l <username> -pw <password> xxx.xxx.xxx.xxx < cmds.txt > out.txt
переключатели находятся в стеках, поэтому мне нужно пропустить сообщения «не управление HP» и запросы «в какой переключатель вы хотите войти», похоже, это работает только с \ n \ n в файле (так же, как я когда я вхожу в putty, введите дважды) Но после этого я получаю длинные последовательности ASCII, которые кажутся странными, потому что все до этого момента работает без проблем.
Я уже принял ключ в замазке, и снова, поскольку я получаю все сообщения входа в систему и командующего стеком, я предполагаю, что все это работает.
Любые подсказки о том, как заставить это работать, или разумную альтернативу для достижения того же?
Пример того, что я получаю ...
HP J9148A 2910al-48G-PoE Switch
Software revision W.15.13.0005
Copyright (C) 1991-2014 Hewlett-Packard Development Company, L.P.
RESTRICTED RIGHTS LEGEND
Confidential computer software. Valid license from HP required for possession,
use or copying. Consistent with FAR 12.211 and 12.212, Commercial Computer
Software, Computer Software Documentation, and Technical Data for Commercial
Items are licensed to the U.S. Government under vendor's standard commercial
license.
HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P.
20555 State Highway 249, Houston, TX 77070
Non-HP transceiver detected, which may cause network problems.
Use 'show interface transceiver' command for details.
HP will not support or troubleshoot problems with these transceivers.
[1;15r[1;1H[24;1HPress any key to continue[15;1H[?25h[24;27H[2J[?7l[1;15r[?6l[24;27H[?25h[23;1H Stack Members
SN MAC Address System Name Device Type Status
-- ------------- ------------- -------------------- -------------------------
0 xxxxxx-xxxxxx Switch1 HP 2910al-48G-PoE Commander Up
1 xxxxxx-xxxxxx Switch2 HP 2910al-48G Member Up
2 xxxxxx-xxxxxx Switch3 HP 2910al-24G-PoE Member Up
[23;1HEnter switch number to connect to or <CR>:[23;1H[23;44H[?25h[23;1H[?25h[23;44H[?6l[1;24r[?7l[2J[1;1H[1920;1920H[6n[1;1HYour previous successful login (as manager) was on 2016-01-29 19:31:41
from xx.x.x.xxx
[1;24r[24;1H[24;1H[2K[24;1H[?25h[24;1H[24;1HSwitch1# [24;1H[24;11H[24;1H[?25h[24;11H[24;0HE[24;1H[24;11H[24;1H[2K[24;1H[?25h[24;1H[1;24r[24;1H[1;24r[24;1H[24;1H[2K[24;1H[?25h[24;1H[24;1HSwitch1# [24;1H[24;11H[24;1H[?25h[24;11H[24;0HE[24;1H[24;11H[24;1H[2K[24;1H[?25h[24;1H[1;24r[24;1H[1;24r[24;1H[24;1H[2K[24;1H[?25h[24;1H[24;1HSwitch1#
Итак, я дошел до приглашения Switch1 # на консоли коммутатора.
мой входной файл на данный момент просто
show mac-address
С двумя пустыми строками выше для выполнения двух запросов «любой ключ» и «продолжить».
Любая помощь очень ценится.
Приходится ли использовать шпатлевку из Windows? Исходя из коробки Linux, я бы сделал
( echo $password ; echo ; echo ; echo show mac-address ) \
| ssh -l $user xxx.xxx.xxx.xxx
или если это не сработает, я воспользуюсь программой expect
. На самом деле существует версия expect для Windows, которую вы, вероятно, могли бы использовать вместо plink.
Ожидайте, что пример синтаксиса будет у меня в голове с различным выходом переключателя (должен работать с или без «нажмите любую клавишу», но, конечно, я ничего не тестировал):
#!/usr/bin/expect -f
spawn ssh -l loginuser [lindex $argv 0]
set timeout 600
while (1) {
expect "Press any key to continue" { send "\n" }
"Enter switch number to connect to or <CR>:" { send "password\n" }
"#" { break }
}
send "show mac-address\n"
expect "#"
send "quit\n"
expect eof
Но сделай, как предложил Пол, и попробуй autoexpect
, он позволит вам выполнить ваш сценарий и выведет ожидаемый сценарий, который будет делать то же самое. Затем вы берете этот вывод и заменяете имя или IP-адрес коммутатора на [lindex $argv 0]
, и выполните его с именем переключателя в качестве аргумента.
Мне так и не удалось заставить это работать должным образом, и я не возвращался на сайт уже долгое время, но, поскольку вопрос казался популярным, я решил опубликовать то, что я в итоге сделал.
Я включил telnet на устройствах и использовал следующие команды и команды стиля telnet сценария NCAT to psudo.
Это позволило мне выполнить команду копирования для TFTP и заставить переключатели отправлять данные обратно мне, а не пытаться проанализировать их из возвращенного вывода. Конечно, я не хотел жестко кодировать пароли и т. Д. И делать его многоразовым для будущих нужд. Это помогло мне справиться с проблемами, которые у меня были. :-)
Switches.txt был просто списком IP-адресов, и мне пришлось использовать NCAT 7.40 в качестве прошлых версий, в которых есть ошибка, которая не позволяла ему работать должным образом.
@ECHO OFF
IF !%1!==!! GOTO no
IF !%2!==!! GOTO no
FOR /F "delims=" %%s IN (switches.txt) DO (
ECHO admin> CMDS
ECHO %2>> CMDS
ECHO(>>CMDS
ECHO(>> CMDS
ECHO copy command 'show mac-address' tftp %1 %%s.txt>> CMDS
ECHO exit>> CMDS
NCAT -t --send-only %%s 23 < CMDS
)
DEL CMDS 1>nul 2>nul
GOTO ext
:no
ECHO ^</NO!^>
:ext
Конечно, это не так безопасно, как метод SSH, на самом деле, если вы не знаете, что трафик не перехватывается, я не предлагаю этого, поскольку он легко анализируется (включая учетные данные), но он был очень функциональным. Это может быть в некотором роде уменьшается за счет выделенной VLAN и отдельной подсети, выделенной только для автоматизации. Думал, что это может помочь другим автоматизировать такие утомительные задачи. Если ничто другое я не проиллюстрирую, где есть желание и системный администратор, есть решение, даже если оно грязное. Надеюсь, это поможет кому-то другому.