Я пытаюсь получить информацию с помощью команды "show mac-address" из набора из 12 коммутаторов procurve в 2 разных местах, все подключенных через оптоволоконный PTP. Я хочу импортировать это в SQL для некоторых запланированных отчетов о статистике, движении, маршрутах и т. Д.
Мне так и не удалось заставить это работать должным образом, и я давно не возвращался на сайт, но, поскольку вопрос казался популярным, я решил опубликовать то, что закончилось.
Я включил 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 и отдельной подсети, выделенной только для автоматизации. Думал, что это может помочь другим попытаться автоматизировать такие утомительные задачи. Если ничто другое я не проиллюстрирую, где есть желание и системный администратор, решение ЕСТЬ, даже если оно грязное. Надеюсь, это поможет кому-то другому.
Нужно ли использовать шпаклевку из Windows? Исходя из Linux box, я бы либо сделал
( echo $password ; echo ; echo ; echo show mac-address ) \
| ssh -l $user xxx.xxx.xxx.xxx
, либо, если это не сработает, я бы использовал программу ожидаемую
. На самом деле есть версия ожидать для 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]
, и выполняете его с именем коммутатора в качестве аргумента.