Вывод команды вывода из сеанса SSH для получения
Я пытаюсь получить информацию из команды "show mac-address" из набора из 12 прокурворов в 2 разных местах, подключенных через оптоволоконный PTP. Я хочу импортировать это в SQL для некоторых запланированных отчетов о статистике, перемещении, маршрутах и т. Д. Мне удалось сгенерировать очень интересные и полезные данные, которые в конечном итоге позволят мне превратить этого монстра, которого я унаследовал, в меньшее количество монстров является.
У меня есть все компоненты этой работы, кроме того факта, что мне нужно вручную собирать данные на каждый коммутатор с помощью замазки, сохранять их в каталоге, где запланированное задание форматирует дампы в csv, очищает их и импортирует их, используя BULK INSERT.
Теперь я хочу автоматизировать извлечение данных с коммутаторов, чтобы сосредоточиться на стороне данных и перестать тратить так много времени на сбор данных.
Я попробовал PLINK, однако, похоже, существует какая-то проблема с эмуляцией, когда данные интерпретируются как неправильный формат, и я получаю файлы, полные бессмысленности.
с помощью...
plink -batch -ssh -l <username> -pw <password> xxx.xxx.xxx.xxx < cmds.txt > out.txt
Коммутаторы находятся в стеках, поэтому мне нужно пройти мимо сообщений "not hp management" и запросов "в какой коммутатор вы хотите войти", похоже, это работает только с \ n \ n в файле (так же, как я будет, когда я войду в putty, введите дважды) Но после этого я получаю длинные последовательности ASCII, которые кажутся странными, потому что все до этого момента работает без проблем.
Я уже принял ключ в putty, и опять же, так как я получаю все сообщения о входе в систему и стеке, я предполагаю, что все это работает.
Любые подсказки о том, как заставить это работать, или разумная альтернатива для достижения того же самого?
Пример того, что я получаю...
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
С двумя пустыми строками выше, чтобы выполнить два "любых ключа" и продолжить "запросы".
Любая помощь с благодарностью.
1 ответ
Нужно ли использовать шпатлевку из Windows? Исходя из коробки Linux, я бы сделал
( echo $password ; echo ; echo ; echo show mac-address ) \
| ssh -l $user xxx.xxx.xxx.xxx
или если это не работает, я бы использовал программу 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 на устройствах и использовал следующие команды и NCAT для псевдо-сценариев команд в стиле telnet.
Это позволило мне выполнить команду копирования в 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 и отдельной подсетью, предназначенной только для автоматизации. Думал, что это может помочь другим, пытаясь автоматизировать такие утомительные задачи. Если ничего другого я не проиллюстрирую, где есть воля и системный администратор, ЕСТЬ решение, даже если оно грязное. Надеюсь, это поможет кому-то еще.