LINUX.ORG.RU
ФорумAdmin

отправка команд в сессию Telnet из bash

 , ,


0

2

Задача: открыть сессию Telnet с удаленным устройством и посылать в эту сессию команды из скрипта bash.

Простой способ с помощью expect известен - вызвать из скрипта bash скрипт expect и оттуда всё послать. Но из скрипта expect я могу открыть сессию Telnet, послать команду (или группу команд), закрыть сессию Telnet, вернуться в скрипт bash. Если надо послать что-то еще - опять открыть сессию Telnet, послать, закрыть сессию Telnet... И так далее.

Нужно иначе - не закрывать сессию после каждой команды, а открыть из скрипта bash сессию Telnet на удаленное устройство, отправить туда команду, не закрывая сессию, проделать манипуляции в скрипте bash (например посмотреть состояние другого устройства после действия на первом), в зависимости от результата - отправить команду в открытую сессию Telnet, опять проделать манипуляции в bash, по их результату - отправить команду в сессию Telnet и так далее (в конце концов командой, отправленной в сессию Telnet будет exit).

Примерно так.


попробуйте это

* dev-tcltk/expect
     Доступные версии:      5.44.1.15 5.45 {X debug doc threads}
     Домашняя страница:     http://expect.nist.gov/
     Описание:              tool for automating interactive applications
gvtlor ()

1) Expect является модулем-расширением Tcl, так что в промежутке между посылкой/получением можно выполнять сколь угодно сложную работу, так же как и работать с несколькими сессиями.
2) Если по каким-либо причинам не хочется углублятся в Tcl:
2.1) Empty, shell-независимо
2.2) запускать telnet, netcat или socat через coproc в bash (махровый башизм).

ABW ★★★★★ ()
Ответ на: комментарий от ABW

Спасибо. Углубляться в TCL действительно не хочется. Простые вещи я в expect делать как-то научился, но так чтобы не просто командочками в телнет кидаться, а получить данные из сессии телнет, передать их во внешнее приложение, получить из внешнего приложения результат, отправить его в сессию телнет- это, по моему, надо нырнуть в TCL так, что и не вынырнуть.

Empty похоже на то, что надо. Смущает, правда одна вещь: если спросили «login:» то послать в ответ логин - это просто. а вот если могут спросить, например,«login:» а могут «user:» (и я заранее не знаю что), и в ответ надо послать разное, то как такое средствами Empty сделать - не очень понятно. Это как раз понятно в expect - но см. выше...

mik73 ()

Модули для работы с expect есть во всех (?) популярных языках программирования

Нампример, на perl полно примеров работы с telnet сессией. Наверняка для других языков тоже

router ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.