Expect linux что это

Использование expect в bash скриптах

Expect — это оболочка предоставляющая возможность програмировать диалог с интерактивными програмами. Под интерактивными програмами подразумеваются приложения, которые требуют ввода дополнительной информации в ходе работы.

Тяжело объяснить без примера. О примерах использвания expect дальше и пойдет речь. Планируется сборная статья, которая будет пополнятся разнообразными примерами использования expect.

Есть два варианта, по аналогии с perl/python :

    Создать скрипт-файл и запустить его следующим образом:

«\r» в конце строки означает отправку команды (нажатие клавиши Enter).

Основная структура скрипта:

Если Вы хотите передать в скрипт какие-то параметры и использовать их в работе воспользуйтесь директивой set :

Используйте interact в конце, если по завершению выполнения всех send’ов сесия должна оставаться активной. Удобно для автоматизации при работе с ssh.

Пример 1: SSH

Стандартному линуксовому ссш клиенту можно стравить имя пользователя и ipадрес сервера как аргуметы, но пароль ему нельзя передать. Следующие скрипт принимает в качестве аргументов имя пользователя и пароль, дальше подключается с ними к серверу 192.168.1.10 и выполняет там cat /etc/issue

Выполнить его можно так:

Второй вариант — запустить все прямо в bash:

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

Весь вывод можно записать в лог использовав следующую конструкцию в начале файла:

Немаловажным является время выполнения. Я не помню значение по умолчанию, но хорошей практивой является установка таймаута на выполнение:

Пример 2: FTP

Допустим нужно загрузить содержимое 10-ти ftp серверов в один каталог на сервере. Представьте использование 10-ти комбинаций логинов, паролей и адрдресов в lftp. Представили? Страшно?

Я вышел из ситуации следующим образом:

  1. Создал файл со следующим содержанием:
  1. Дальше катнул, эхнул, седнул и авкушнул оригинальный файл и получил новый файл в котором первая колонка — пользователь@ip_сервера, вторая — пароль.
  1. В bash запустил следующу команду:

С помощью rsync загружаем выбраные папки с сервера

На сервере с Plesk файлы сайтов лежат в папках /var/www/vhosts/имя_сайта/httpdocs . У нас есть список сайтов:

  • web-сайт1.com
  • web-сайт2.com
  • web-сайт3.com
  • web-сайт4.com
  • web-сайт5.com
  • web-сайт6.com
  • web-сайт7.com
  • web-сайт8.com
  • web-сайт9.com

Нужно стянуть папки этих сайтов на новый сервер.

В подобных случаях я инициализирую в bash список с названием list:

Подсказка: Набираете сначала list=» , потом делаете вставку из буфера обмена, потом закрываете список двойными кавычками «

Читайте также:  Основы графического интерфейса windows это

Дальше цыклом for перебираю эллементы списка:

Источник

Expect примеры Linux

Expect — инструмент для автоматизации интерактивных приложений таких, как telnet, ftp, passwd, fsck, rlogin, tip, Настройка и использование SSH и других. Expect поддерживает механизм регулярных выражений и основные возможности программирования, позволяющие простым скриптам эффективно управлять такими программами, не обладающими встроенным скрипт-языком, макросами, или другими механизмами программирования. Эффективен при работе с сетевым оборудованием — массовое обновление конфигураций управляемого (активного) сетевого оборудования с дифференцированным выполнением команд.

Одним из главных применений Expect являются коммерческие приложения. Многие из этих приложений предоставляют интерфейс командной строки, но, как правило, его недостаточно для написания скриптов. Они созданы для обеспечения пользователя средствами администрирования, но производители зачастую не тратят денег на создание полноценного скриптового языка.

Expect унаследовал синтаксис Tcl, который не похож на другие скриптовые языки, такие как bash, C shell (csh), и Perl в командной строке — примеры использования.

Expect портирован в языки Python и Perl в виде различных дополнительных модулей. Подмножество команд Expect-а портировано в Java и доступно в SwitchTermJ (java-based Terminal Emulator). Реализация процедур в этих модулях это в основном интерпретация оригинальной версии с эквивалентной функциональностью.

expect_autoexpect

Скрипт expect_autoexpect позволяет создать скрипт с командами из текущей сессии. Например, создадим скрипт, который применяет изменения настройки для Softswitch VoIP платформа MVTS (Мера) Pro.

Жмем Ctrl-D для завершения работы скрипта expect_autoexpect

Источник

Русские Блоги

Введение и примеры использования Linux Expect

1 Введение ожидать

expect — это инструмент для автоматизированного контроля и тестирования. В основном он взаимодействует с интерактивным программным обеспечением, таким как telnet ftp passwd fsck rlogin ssh tip и так далее. Очень полезно для крупномасштабной эксплуатации и обслуживания Linux.expect sourceforge

2 ожидают базового использования

При эксплуатации, обслуживании и разработке Linux нам часто требуется удаленный вход на сервер для выполнения операций.Процесс входа в систему является интерактивным, и вам может потребоваться ввести такую ​​информацию, как пароль типа да / нет. Чтобы смоделировать этот ввод, вы можете использовать сценарий ожидания.
ожидание вызваноязык tclОн развивался, поэтому для работы сценария expect требуется поддержка tcl. Пожалуйста, погуглите шаги по установке tcl и ожидайте.

2.1 ожидать ключевых команд

send: отправить строку процессу для имитации пользовательского ввода. Обратите внимание, что вы должны добавить \ r, чтобы войти
expect: получить строку от процесса
spawn: запустить процесс (вывод процесса, запущенного spawn, может быть получен с помощью expect)
interact: взаимодействие с пользователем
, где ожидать — ключевая часть, ожидать на английском языкеждать с нетерпениемСмысл использования грамматики tcl mode-action, эта грамматика имеет следующие режимы:
Синтаксис одной ветви:

Когда вывод содержит привет, вывод вы сказали привет
Синтаксис режима с несколькими ветвями:

Когда вывод содержит lilei, выводите hello lilei, выполняя цикл этого оператора с несколькими ветвями
Если вывод содержит hanmeimei, выведите hello hanmeimei и зациклите этот оператор с несколькими ветвями одновременно
Когда вывод содержит сообщение «Как вы делаете?», вывод dow do you do

Читайте также:  Стираются ли данные при установке windows

3 Пример использования

3.1 Войдите на сервер удаленно и создайте папку

3.2 ожидайте, что скрипт получит параметры

3.3 Сервер удаленного входа в систему, ожидающий ручного управления

3.4 Использование scp для передачи файлов
3.5 Открытие прокси socks5 локально

Строки 4-5 предназначены для выполнения предустановленной команды на основе выходных данных процесса:
Если вывод содержит да / нет, это означает, что это первый вход в систему, и вам нужно ввести да, чтобы добавить доверие. exp_continue означает продолжение этого цикла.
Если вывод содержит пароль, это означает, что пароль требуется.
Ожидаемое значение eof в строке 8 ожидает знака конца. Команда, инициированная spawn, сгенерирует метку eof в конце, ожидайте, что eof ожидает этой метки, потому что программа ssh -N -D 0.0.0.107:1080 localhost должна работать все время, поэтому установите таймаут на -1 для неограниченного Жду.

3.6 Укажите машину для входа

Прочтите информацию о соответствующем компьютере из computerInfo, и пользователь решит войти в систему на одной из машин.
computerInfo:

Источник

Expect-5.42.1

Введение в Expect

Пакет Expect содержит средства для автоматизации таких интерактивных приложений, как telnet , ftp , passwd , fsck , rlogin , tip и др. Expect так же полезен для проверки этих приложений для всех видов задач, проверка которых чрезмерно сложна с чем нибудь другим.

Информация о пакете

Контрольная сумма: fea346fac6aaf74b0851f2441f478571

Требуемое дисковое пространство: 4.8 MB

Расчетное время сборки: 0.1 SBU

Дополнительно

Зависимости Expect

Требуемые
Опционально

Установка Expect

Установим Expect запуском следующих команд:

А теперь, как пользователь root:

Описание команд

--enable-shared: Эта опция включает сборку разделяемых библиотек.

—with-tk=/usr/lib: Используйте эту опцию для связи с библиотекой Tk .

ln -sf ../libexpect5.42.a /usr/lib/expect5.42 : Эта команда создает требуемую ссылку на статическую библиотеку.

Конфигурация Expect

Файлы конфигурации

Конфигурационная информация

Обратитесь к man странице по expect для информации по использованию файла конфигурации expect.rc. Дополнительно, многие из средств, входящих в пакет Expect , будут использовать их собственные файлы конфигурации. Обратитесь к соответствующей man странице или прямо проверьте скрипт для информации по файлу конфигурации.

Содержание

Короткое описание

генерирует скрипт Expect из наблюдаемой сессии.

это оболочка, делающая passwd (1) не интерактивным.

шифрирует все файлы в директории.

дешифрирует все файлы в директории.

позволяет отключить процессы и переподключить их к терминалу.

это программа, которая “ говорит ” с другим интерактивным программам, соответствующим скрипту.

восстанавливает RFC (или индекс) из UUNET .

позволяет двум (или более) людям общаться с одной оболочкой (или другой произвольной программой).

снимает принтер, который требует “ ожидания для закрытия ”.

генерирует пароли и может автоматически применять их к пользователям.

изменяет пароль на многочисленных машинах.

более приятный ftp , исключающий использование им

это rlogin , исключающий использование им локальной текущей директории в качестве текущей рабочей директории на удаленной машине.

Читайте также:  Клиент steam для linux

читает целую строку с stdin и прерывается после указанного числа секунд.

запускает программу на указанную продолжительность времени.

выключает выходную буферизацию, которая происходит при переадресации вывода программы.

восстанавливает отчет о погоде (благодаря Университету Мичигана) для указанного города или географической области.

это комбинация Expect с Tk и может запускать любой wish или Expect скрипт.

создает многочисленные терминалы xterm , которые могут быть управляемы вместе или раздельно.

выыодит окно на передний план при наличии непрочитанных новостей в вашей группе новостей и удаляет это окно после прочтения новостей.

скрипт для изменения паролей, использующий expectk .

позволяет пользователям в отдельных окнах xterm разделять одну оболочку (или любую программу, запущенную в xterm ).

это скрипт, служащий оболочкой для xpilot .

содержит функции, позволяющие Expect быть использованным в качестве расширения Tcl или использоваться прямо из C или C++ (без Tcl ).

Последнее обновление 2005-01-30 10:59:50 -0700

Источник

Expect: Практического применение систем автоматизации

Рано или поздно становится понятно, что многие вещи можно автоматизировать при помощи тех же shell-скриптов, это верно когда дело касается администрирования Linux систем, но что делать когда удаленная система совсем не похожа на linux, например обычная консоль? В этом нам поможет — expect.

Expect — инструмент для автоматизации таких интерактивных приложений, как telnet, ftp, passwd, fsck, rlogin, tip, ssh, и т.д. Основная идея состоит в том, чтобы автоматизировать существующие инструменты, а не изобретать велосипеды по несколько раз.

Для примера давайте попробуем разобрать скрипт для обновления «cisco privilege» на определенном списке оборудования получаемым из списка в файле «ip». Листинг выглядит следующим образом:

Как видно из листинга — язык не такой уж сложный.

  • В начале идет обязательный заголовок «#!/usr/bin/expect -f».
  • Мы присваиваем переменной «password» значение «mypassword».

Прописывать пароль в коде или задавать его в командной строке, не самое правильное решение с точки зрения безопасности. Правильней спрашивать пароль в самом начале в виде интерактивного сеанса.

  • Открываем файл «ip», читаем его построчно при этом значение первого столбца записываем в переменную «SWITCH_IP».
  • Если полученный аргумент не пустой, выполняем команду telnet
  • Передаем логин и пароль. Для наглядности в листинге 2 разных способа.
  • Ожидаем символа «#», если символ прилетел, то отправляем «conf t\r».
  • Повторяем данную операцию несколько раз, но уже с другими командами.
  • Уходим в интерактивный режим, если в этом есть необходимость.
  • Закрываем файл и завершаем expect.

Как видно из листинга и описания, скрипт очень простой и требует огромной доработки в плане обработки исключений и особенностей вывода того же оборудования. Несмотря на это пример рабочий, и позволяет существенно экономить сетевых инженеров. Но, в тоже время, это лишь пример или правильней сказать болванка, для ваших дальнейших наработок. В интернете большое количество различных примеров для работы с expect так что — дерзайте!

Источник

Оцените статью