Задать вопрос

Как подавить ненужные символы при работе скрипта Expect с коммутаторами?

День добрый,
автоматизирую работу с сетевыми коммутаторами, выполняю скриптом необходимые команды.
Проверил работу со многими (успешно), но натолкнулся на оду железку, где при обмене данными она
посылает нечто, отчего скрипт зависает, не дожидается ожидаемого вывода.

Если делать логин по ssh на коммутатор *руками*, то вот пример успешного захода:

[user@linux]# /usr/bin/ssh -e none superuser@10.78.10.1
Password:
Welcome to console

Enter username: superuser
Enter terminal type: vt100
COREHOST:1:> help
system: namespace for system parameters

А вот что вылазит при работе скрипта Expect:

[user@linux]# ./talk-to-switch
spawn ssh -o PubkeyAuthentication=no superuser@10.78.10.1
Password:
Welcome to console

Enter username: superuser
Enter terminal type: vt100
COREHOST:1:> ^[[62;13R

т.е успешно зашли на железку, но она выплюнула некую последовательность
"^[[62;13R" (может ESC символы), которые не ожидаются.

Использую Expect, пробовал Perl модуль NET::SSH::Expect - ситуация аналогичная.

Подскажите пожалуйста, что это могут быть за символы, кот. появляются при работе только
скриптов (ssh руками на железку работает успешно) и можно ли их как-то фильтровать/подавить?

ps. тип терминала менял, не помогло.

Использую такой скрипт:
#!/usr/bin/expect -f
set timeout -1
spawn ssh -o PubkeyAuthentication=no tsp@10.78.10.1
expect -exact "Password: "
sleep 1
send -- "mypassword\r"
expect -exact ">"
sleep 1
send -- "sh version\r"
expect -exact ">"
sleep 1
send -- "exit\r"
expect {\$\s*} { interact }
  • Вопрос задан
  • 293 просмотра
Подписаться 3 Средний 3 комментария
Пригласить эксперта
Ответы на вопрос 1
@vetash
Попробуйте ожидать приглашения консоли по паттерну, а не точного совпадения.
Для MikroTik использую вот такое:
expect "*@*]*>"
и уберите sleep.
Например:

#!/usr/bin/expect -f
set timeout -1
spawn ssh -o PubkeyAuthentication=no tsp@10.78.10.1
expect "Password: "
send "mypassword\r"
expect "*>"
send "sh version\r"
expect "*>"
send "exit\r"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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