В процессе написания диплома, вплотную столкнулся с проблемой автоматического выполнения определенных команд на удаленной машине с помощью скрипта. Трудности заключались именно в автоматической авторизации из консоли и ввода команд, которые нельзя передать как параметр.
До этого задавался несколько раз таким вопросом, но лень было искать, а сейчас деваться некуда — пошел гуглить… И вот судьба свела меня с такой прекрасной штукой как Expect (пишу немного на эмоциях, т.к. это как раз то, чего мне не хватало для полного счастья :)).
В двух словах: Expect — это что-то типа скриптового языка программирования высокого уровня. Главной его особенностью является то, что он позволяет работать с интерактивными консольными приложениями, соответственно может передавать приложению параметры и обрабатывать их ответ в интерактивном режиме.
Это открывает большие возможности для автоматизации действий, которые выполняются в фоне, или по расписанию.
На практике это выглядит так —
Например, нам нужно в определенное время подключиться по ssh к удаленному серверу от имени пользователя и выполнить какую-то команду с правами рута (через sudo). С помощью Expect это можно запросто сделать скриптом:
#!/usr/bin/expect -f # Объявляем переменные set host "remoute-host.com" set username "vasya" set password "vasyapassword" # Открываем сессию ssh spawn ssh $username@$host # Ждем приглашения на ввод пароля expect "password:" # Передаем значение переменной password и ждем приглашения системной оболочки send "$password\r" expect -re "\\$ $" # Выполняем команду на удаленном сервере и ждем запрос пароля send "sudo cat /etc/shadow\r" expect "(Password:|Пароль:)" # Опять передаем пароль send "$password\r" # Выходим из системы send "logout\r" # Конец файла expect eof
Это самый простой пример, но по нем можно оценить некоторые возможности Expect.
Для более подробного описания команд и синтаксиса нужно гуглить, мб со временем добавлю что-то сюда.
Спасибо за пост! Вы мне очень помогли. С expect`ом до сего времени не сталкивался. Быть может посоветуете какой-либо ресурс для изучения сих глубин?
Боюсь что с ресурсом не помогу :( Данную приблуду использовал во времена написания диплома, вроде разбирался по мануалу…