Для таких целей есть замечательная утилитка, имя которой 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 коммент.:
нет команды spawn на windows машине. А плагиатить документацию любой засранец может.
А тут речь идет о linux машине и там все это есть. А троллить любой засранец может.
спасибо! только узнал что есть такая тулза. искал телнет без пароля. очень помогло
Отправить комментарий