Expect-утилита автоматизации ежедневных задач
В процессе автоматизаций рутинных задач по администрированию различных систем,часто требуется выполнения такой тревиальной задачи как ввод строки логина и пароля.
Вот для таковых целей есть непримечательная утилитка, имя которой expect.
Работает утилита по принципу “Ожидай и вводи”, т.е. ожидает приглашения ввода и, когда дожидается, высылает заданную команду.
Ниже приведено два образца для часто используемых telnet и ftp сессий, имеющие подробные комментарии. Внимательно разберите данный пример автоматизации сессий и пользуйтесь на здоровье.
Для автоматизации telnet сессий:
#!/usr/bin/expect -f
remote_server=’192.168.0.1′ # сервер, к которому осуществляется доступ
my_user_id=’Admin’ # имя пользователя на сервере
my_password=’root’ # пароль пользователя на сервере
my_command=’adsl info’ # команда, которая будет запущена на сервере
log_user 0 # Отключаем вывод, чтобы не мешался
spawn telnet $remote_server # Открываем telnet сессию на удаленном сервере
expect “Username :” {send “$my_user_id\r”} # Дожидаемся запроса имени пользователя и посылаем имя пользователя
expect “Password :” {send “$my_password\r”} # Дожидаемся запроса пароля и посылаем его
expect “{Administrator}=>” {send “$my_command\r”} # Дожидаемся приглашения ввода командного интерпретатора и посылаем нашу команду
log_user 1 # Включаем вывод, нам же нужен результат работы нашей команды
send “exit\r” # Завершаем сессию telnet
expect eof # Ждем символа конца строки (eof)
Для автоматизации ftp сессий:
#!/usr/bin/expect -f
remote_server=’192.168.0.1′ # сервер, к которому осуществляется доступ
my_user_id=’Admin’ # имя пользователя на сервере
my_password=’root’ # пароль пользователя на сервере
my_command=’mget *’ # команда, которая будет запущена на сервере
log_user 0 # Отключаем вывод, чтобы не мешался
spawn telnet $remote_server # Открываем ftp сессию на удаленном сервере
expect “username:” {send “$my_user_id\r”} # Дожидаемся запроса имени пользователя и посылаем имя пользователя
expect “password:” {send “$my_password\r”} # Дожидаемся запроса пароля и посылаем его
expect “ftp>” {send “bin\r”} # Ждем приглашения ввода ftp и переключаемся в бинарный режим
expect “ftp>” {send “$my_command\r”} # Дожидаемся следующего приглашения ввода ftp и посылаем нашу команду
log_user 1 # Включаем вывод, нам же нужен результат работы нашей команды
send “bye\r” # Завершаем сессию ftp
expect eof # Ждем символа конца строки (eof)
Также обратите внимание на man netrc, которая,возможно, легче для использования в конкретных случаях для автоматизации telnet и ftp сессий.

























