1

Я пытаюсь подключиться к маршрутизатору через telnet с помощью этого сценария:

#!/usr/bin/expect -f

set timeout 20

# router user name
set name "admin"

# router password
set pass "admin"

# router IP address
set routerip "192.168.1.1"

# Read command as arg to this script
set routercmd "cat /var/1.leases" 

# start telnet
spawn telnet $routerip

# send username & password
expect "username:"
send -- "$name\n"
expect "password:"
send -- "$pass\n"

# get out of ISP's  Stupid menu program, go to shell
expect "TBS>>"
send --  "sh\n"

# execute command
expect -re ".*\$"
send -- "$routercmd\n"

# exit
send -- "^D"

Теперь скрипт отлично работает до send -- "sh\n" . Он попадает в командную строку, которая выглядит как: ~ $ (tilda-space-dollar-space). Однако я не могу выполнить команду после этого. Это просто не работает после этого.

Кто-нибудь может сказать почему? Это какая-то ошибка, которую я делаю?

1 ответ1

0

Хорошо. Я взломал это. Он должен был что-то делать с неправильным сопоставлением с образцом в expect части в последних строках кода.

В первую очередь я сгенерировал записанный скрипт, используя autoexpect . Этот инструмент используется для записи ваших сессий и создания сценария на основе этого. Чтобы сделать это, я сначала установил пакет autoexpect (доступный в expect-dev пакете на системах на основе Debian), а затем записал мой сеанс:

sudo apt-get install expect-dev          #Since I'm on Ubuntu
autoexpect telnet 192.168.1.1

autoexpect автоматически сгенерировал скрипт для меня. Когда я запустил этот скрипт, он доходил до выполнения моей команды и выполнял его в маршрутизаторе, но затем не мог выйти. Взяв подсказки из этого сценария и прочитав справочную страницу ожидаемых данных, я наконец понял, что с распознаванием образов возникли некоторые проблемы. Я наконец изменил скрипт соответственно, и вот что наконец работает:

#I am mentioning here only the end part of the complete script which was faulty
# execute command
expect "~ \$ "
send -- "$routercmd\r"

expect "~ \$ "
send -- "exit\r"

expect -- "TBS>>"
send -- "exit\r"

expect -- "*Are you sure to logout?*" 
send -- "y"
expect eof

Итак, извлеченный урок состоял в том, что мы должны использовать autoexpect для автоматической генерации скриптов. И затем, если есть какая-то ошибка в этих автоматически сгенерированных скриптах, это, скорее всего, будет связано с неправильным распознаванием образов в expect части.

В моем случае, по существу, неисправная часть была:

expect -re ".*\$"    #WRONG
expect "~ \$ "       #RIGHT

Неисправные части будут полностью зависеть от вашего сеанса, с которым вы связываетесь. Обращение к почтовому серверу через telnet вернет разные результаты, и вы должны будете соответствовать соответственно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .