Использование Expect для автоматизации администрирования

В процессе написания диплома, вплотную столкнулся с проблемой автоматического выполнения определенных команд на удаленной машине с помощью скрипта. Трудности заключались именно в автоматической авторизации из консоли и ввода команд, которые нельзя передать как параметр.

До этого задавался несколько раз таким вопросом, но лень было искать, а сейчас деваться некуда — пошел гуглить… И вот судьба свела меня с такой прекрасной штукой как 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 для автоматизации администрирования: 2 комментария

  1. Александр

    Спасибо за пост! Вы мне очень помогли. С expect`ом до сего времени не сталкивался. Быть может посоветуете какой-либо ресурс для изучения сих глубин?

    1. Доктор Добрянский Автор записи

      Боюсь что с ресурсом не помогу :( Данную приблуду использовал во времена написания диплома, вроде разбирался по мануалу…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Не робот ли ты часом? * Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.