Сохранение вывода команды из сеанса SSH для обработки

Я пытаюсь получить информацию с помощью команды "show mac-address" из набора из 12 коммутаторов procurve в 2 разных местах, все подключенных через оптоволоконный PTP. Я хочу импортировать это в SQL для некоторых запланированных отчетов о статистике, движении, маршрутах и ​​т. Д.

0
задан 30 January 2016 в 19:19
2 ответа

Мне так и не удалось заставить это работать должным образом, и я давно не возвращался на сайт, но, поскольку вопрос казался популярным, я решил опубликовать то, что закончилось.

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

0
ответ дан 4 December 2019 в 16:42

Нужно ли использовать шпаклевку из 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], и выполняете его с именем коммутатора в качестве аргумента.

.
1
ответ дан 4 December 2019 в 16:42

Теги

Похожие вопросы