Содержание

Expect примеры Linux

Expect - инструмент для автоматизации интерактивных приложений таких, как telnet, ftp, passwd, fsck, rlogin, tip, Использование ssh, ssh-keygen, sshpass с примерами и других. Expect поддерживает механизм регулярных выражений и основные возможности программирования, позволяющие простым скриптам эффективно управлять такими программами, не обладающими встроенным скрипт-языком, макросами, или другими механизмами программирования. Эффективен при работе с сетевым оборудованием - массовое обновление конфигураций управляемого (активного) сетевого оборудования с дифференцированным выполнением команд.

Одним из главных применений Expect являются коммерческие приложения. Многие из этих приложений предоставляют интерфейс командной строки, но, как правило, его недостаточно для написания скриптов. Они созданы для обеспечения пользователя средствами администрирования, но производители зачастую не тратят денег на создание полноценного скриптового языка.

Expect унаследовал синтаксис Tcl, который не похож на другие скриптовые языки, такие как Основы BASH скрипты, циклы, горячие клавиши, C shell (csh), и perl.

Expect портирован в языки Синтаксис Python и Perl в виде различных дополнительных модулей. Подмножество команд Expect-а портировано в Как установить Java на Ubuntu и доступно в SwitchTermJ (java-based Terminal Emulator). Реализация процедур в этих модулях это в основном интерпретация оригинальной версии с эквивалентной функциональностью.

apt install expect-dev expect

expect_autoexpect

Скрипт expect_autoexpect позволяет создать скрипт с командами из текущей сессии. Например, создадим скрипт, который применяет изменения настройки для Softswitch VoIP платформа MVTS (Мера) Pro.

# expect_autoexpect
autoexpect started, file is script.exp
# telnet 127.0.0.1 7000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
******************************************************************************
*                   Multiprotocol VoIP Transit Softswitch                    *
*                                                                            *
******************************************************************************

mvts3g|> config /etc/mvts3g/system-1.conf
Step 1: Parsing a configuration file...
Step 2: Configuring the system...
Step 3: Done.
mvts3g|> exit
Connection closed by foreign host.

Жмем Ctrl-D для завершения работы скрипта expect_autoexpect

# exit
autoexpect done, file is script.exp

Теперь у нас получился запускаемый скрипт script.exp, который позволяет вместо набора трех команд просто запустить его:

# ./script.exp

Примеры использования

ftp_expect.sh

#!/usr/bin/expect -f
   ######################################################################################
   #$remote_server - сервер, к которому осуществляется доступ                           #
   #$my_user_id    - имя пользователя на сервере                                        #
   #$my_password   - пароль пользователя на сервере                                     #
   #$my_command    - команда, которая будет запущена на сервере        
   
   set remote_server xxx.xxx.xxx.225
   set my_user_id testuser
   set my_password testpass
   # Открыть ftp-сессию на удалённом сервере, и ждать запроса имени пользователя.
   spawn ftp $remote_server
   expect "username:"
   # Послать имя пользователя, и ждать приглашения ввода пароля.
   send "$my_user_id\r"
   expect "password:"
   # Послать пароль, и ждать приглашения ввода ftp.
   send "$my_password\r"
   expect "ftp>"
   # Переключиться в бинарный режим, и снова ждать приглашения ввода ftp.
   send "bin\r"
   expect "ftp>"
   # Выключить приглашение ввода.
   send "prompt\r"
   expect "ftp>"
   # Получить все файлы
   send "mget *\r"
   expect "ftp>"
   # Закончить ftp-сессию и ждать спецсимвол конца файла (eof).
   send "bye\r"
   expect eof

ssh_expect.sh

#!/usr/bin/expect -f
#set timeout 100
set PASS "testpass"
set USER "testuser"
spawn ssh -T $USER@[lrange $argv 0 0];
expect "password:"
send "$PASS\r"
expect "$"
send "ls\r"
expect "$"
send "exit\r"
expect eof