Вывод команды вывода из сеанса 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 и отдельной подсетью, предназначенной только для автоматизации. Думал, что это может помочь другим, пытаясь автоматизировать такие утомительные задачи. Если ничего другого я не проиллюстрирую, где есть воля и системный администратор, ЕСТЬ решение, даже если оно грязное. Надеюсь, это поможет кому-то еще.

Другие вопросы по тегам