В процессе автоматизаций рутинных задач по администрированию различных систем,часто требуется выполнения такой тревиальной задачи как ввод строки логина и пароля.
Вот для таковых целей есть непримечательная утилитка, имя которой 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 сессий.
Похожие публикации: