Система Orphus
[]

пятница, 15 мая 2009 г.

Автоматизируем telnet и ftp сессии [expect]

Типичная ситуация: в офисе есть сетевой принтер, который расположен на другом этаже, мне звонят и говорят, что он "начал плеваться бумагой", ясное дело, что очередь забилась, чтобы не идти на другой этаж можно подключиться к принтеру по telnet и очистить очередь печати, но каждый раз вводить логин, пароль и команды уж очень не хочется, хочется максимально сократить телодвижения. Вот об этом и пойдет речь в этом посте на примере ftp и telnet сессий.

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

Ниже приведу два примера для telnet и ftp сессий, с подробными комментариями, так чтож сможет разобраться даже новичек.

telnet сессия:
#!/usr/bin/expect -f

# $remote_server - сервер, к которому осуществляется доступ
# $my_user_id - имя пользователя на сервере
# $my_password - пароль пользователя на сервере
# $my_command - команда, которая будет запущена на сервере

# Отключаем вывод, чтобы не мешался
log_user 0
# Открываем telnet сессию на удаленном сервере
spawn telnet $remote_server
# Дожидаемся запроса имени пользователя и посылаем имя пользователя
expect "Username :" {send "$my_user_id\r"}
# Дожидаемся запроса пароля и посылаем его
expect "Password :" {send "$my_password\r"}
# Дожидаемся приглашения ввода командного интерпретатора и посылаем нашу команду
expect "{Administrator}=>" {send "$my_command\r"}
# Включаем вывод, нам же нужен результат работы нашей команды :)
log_user 1
# Завершаем сессию telnet
send "exit\r"
# Ждем символа конца строки (eof)
expect eof


ftp сессия:
#!/usr/bin/expect -f

# remote_server - сервер, к которому осуществляется доступ
# my_user_id - имя пользователя на сервере
# my_password - пароль пользователя на сервере
# my_command - команда, которая будет запущена на сервере

# Отключаем вывод, чтобы не мешался
log_user 0
# Открываем ftp сессию на удаленном сервере
spawn ftp $remote_server
# Дожидаемся запроса имени пользователя и посылаем имя пользователя
expect "username:" {send "$my_user_id\r"}
# Дожидаемся запроса пароля и посылаем его
expect "password:" {send "$my_password\r"}
# Ждем приглашения ввода ftp и переключаемся в бинарный режим
expect "ftp>" {send "bin\r"}
# Дожидаемся следующего приглашения ввода ftp и посылаем нашу команду
expect "ftp>" {send "$my_command\r"}
# Включаем вывод, нам же нужен результат работы нашей команды :)
log_user 1
# Завершаем сессию ftp
send "bye\r"
# Ждем символа конца строки (eof)
expect eof



На этом все :)
Надеюсь этот небольшой пост поможет не раз сэкономить тебе время, силы и нервы :)



UPD: Павел, спасибо тебе, за найденный "баг" в оформлении :)

Похожие статьи

3 коммент.:

Анонимный комментирует... суббота, 30 июля 2011 г., 19:07:00 GMT+3

нет команды spawn на windows машине. А плагиатить документацию любой засранец может.

Angel2S2 комментирует... суббота, 30 июля 2011 г., 23:23:00 GMT+3

А тут речь идет о linux машине и там все это есть. А троллить любой засранец может.

sm1Ly комментирует... среда, 28 октября 2015 г., 9:44:00 GMT+2

спасибо! только узнал что есть такая тулза. искал телнет без пароля. очень помогло

Отправить комментарий