bash скрипт ввод пароля
Как ввести пароль для команды, которая запрашивает его в bash?
Я пишу функцию оболочки UNIX, которая будет выполнять команду, которая предложит пользователю ввести пароль. Я хочу жестко закодировать пароль в скрипт и предоставить его команде. Я пытался ввести пароль в команду следующим образом:
Это может не сработать для некоторых команд, так как команда может очистить входной буфер перед запросом пароля.
Я также пытался перенаправить стандартный ввод в файл, содержащий пароль, как это, но это тоже не работает:
Я знаю, что некоторые команды позволяют вводить пароль в качестве аргумента,но я бы предпочел использовать стандартный ввод.
Я ищу быстрый и грязный способ вставить пароль в команду в баше.
Если ваша команда не позволяет использовать перенаправление ввода, параметр командной строки или конфигурационный файл, то вам придется прибегнуть к серьезному обману.
Программы, которые запрашивают пароли, обычно устанавливают tty в «сырой» режим и считывают входные данные непосредственно из tty. Если вы создадите подпроцесс в pty, вы можете заставить его работать. Именно это и делает Expect.
Взгляните на autoexpect (достойный учебник здесь). Это настолько быстро и грязно, насколько вы можете получить, не прибегая к обману.
Как использовать автоэкспект для передачи пароля в команду:
Эти шаги проиллюстрированы на рабочем столе Ubuntu 12.10. Точные команды для вашего распределения могут немного отличаться.
Это опасно, потому что вы рискуете раскрыть любой пароль, который вы используете, любому, кто может прочитать файл сценария autoexpect.
Не раскрывайте свой пароль root или пароли опытных пользователей, передавая их через expect подобным образом. Корневые наборы найдут это в одно мгновение, и ваша коробка будет принадлежать.
EXPECT порождает процесс, считывает текст, который поступает, а затем отправляет текст, предварительно определенный в файле скрипта.
Убедитесь, что у вас установлены expect и autoexpect :
Перейдите в свой домашний каталог:
Пользователь el не может передать файл в корневой каталог и должен ввести пароль:
Это ввод пароля, который мы хотим автоматизировать. Перезагрузите терминал, чтобы убедиться, что sudo снова запросит у нас пароль. Снова зайдите в /home / el и сделайте это:
Вы создали my_test_expect.exp файл. Ваш супер секретный пароль хранится в этом файле открытым текстом. Это должно заставить вас чувствовать себя очень неуютно. Смягчите некоторый дискомфорт, максимально ограничив разрешения и права собственности:
Вы видите такие команды в нижней части my_test_expect.exp :
Вам нужно будет убедиться, что приведенные выше команды expect подходят. Если сценарий autoexpect слишком чувствителен или недостаточно чувствителен, то он зависнет. В этом случае это приемлемо, потому что ожидание-это ожидание текста, который всегда будет приходить.
Запустите ожидаем скрипт как пользователь Эл:
Пароль, содержащийся в my_test_expect.EXP был поставлен в этом файле в корень пользователя Эл. Чтобы узнать, принят ли пароль, загляните в myfile.txt :
Это сработало, потому что это root, и Эл никогда не вводил пароль. Если вы предоставите свой пароль root, sudo или power user с помощью этого скрипта, то получить root на вашем ящике будет легко. Таково наказание за систему безопасности, которая не позволяет никому задавать вопросы.
Bash скрипт ввод пароля
Developer
Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine
Репутация: 1
Всего: 11
как в bash скрипте произвести ввод пароля.
Тоесть например скрипт инициирует связь по ssh.
example:
ssh 192.168.0.15
Как в скрипте написать ввод пароля что бы команды после данной нормально отрабатывались. С ssh то вообщем понятно, тут можно и просто ключи настроить и не париться. Но интересует общий случай. Тоесть например вызов команды su в ssh скрипте.
Developer
Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine
Репутация: 1
Всего: 11
Опытный
Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane
Репутация: 9
Всего: 40
Developer
Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine
Репутация: 1
Всего: 11
Опытный
Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane
Репутация: 9
Всего: 40
а expect не пробовали?
свой собственный
Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ
Репутация: 17
Всего: 259
Программист-романтик
Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж
Репутация: 4
Всего: 92
Developer
Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine
Репутация: 1
Всего: 11
Спасибо за совет! То что мне и надо! Он мне помог
Ну это не проблема, так как скрипты создаются динамически и сразу же после выполнения удаляются. Так что тут все ок )
Спасибо, отличная статья.
Всем спасибо. Вопрос решен!
Профиль
Группа: Участник
Сообщений: 1
Регистрация: 29.2.2008
Репутация: нет
Всего: нет
Naughtius Maximus
Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel
Репутация: 113
Всего: 317
За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу). В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.
[ Время генерации скрипта: 0.1245 ] [ Использовано запросов: 21 ] [ GZIP включён ] Bash-скрипты, часть 11: expect и автоматизация интерактивных утилитВ прошлый раз мы говорили о методике разработки bash-скриптов. Если же суммировать всё, что мы разобрали в предыдущих десяти материалах, то вы, если начинали читать их, ничего не зная о bash, теперь можете сделать уже довольно много всего полезного. Сегодняшняя тема, заключительная в этой серии материалов, посвящена автоматизации работы с интерактивными утилитами, например, со скриптами, которые, в процессе выполнения, взаимодействуют с пользователем. В этом деле нам поможет expect — инструмент, основанный на языке Tcl. Expect позволяет создавать программы, ожидающие вопросов от других программ и дающие им ответы. Expect можно сравнить с роботом, который способен заменить пользователя при взаимодействии со сценариями командной строки. Основы expectЕсли expect в вашей системе не установлен, исправить это, например, в Ubuntu, можно так: В чём-то вроде CentOs установка выполняется такой командой: Expect предоставляет набор команд, позволяющих взаимодействовать с утилитами командной строки. Вот его основные команды: Автоматизация bash-скриптаНапишем скрипт, который взаимодействует с пользователем и автоматизируем его с помощью expect. Вот код bash-скрипта questions : Теперь напишем expect-скрипт, который запустит скрипт questions и будет отвечать на его вопросы: В последней команде expect ожидает признака конца файла, скрипт, дойдя до этой команды, завершается. Теперь пришло время всё это опробовать. Сделаем answerbot исполняемым файлом: Expect-скрипт отвечает на вопросы bash-скрипта Как видно, expect-скрипт верно ответил на вопросы bash-скрипта. Если на данном этапе вы столкнулись с ошибкой, вызванной тем, что неправильно указано расположение expect, выяснить его адрес можно так: Обратите внимание на то, что после запуска скрипта answerbot всё происходит в полностью автоматическом режиме. То же самое можно проделать для любой утилиты командной строки. Тут надо отметить, что наш bash-скрипт устроен очень просто, мы точно знаем, какие именно данные он выводит, поэтому написать expect-скрипт для взаимодействия с ним несложно. Задача усложняется при работе с программами, которые написаны другими разработчиками. Однако, здесь на помощь приходит средство для автоматизированного создания expect-скриптов. Autoexpect — автоматизированное создание expect-скриптовAutoexpect позволяет запускать программы, которые надо автоматизировать, после чего записывает то, что они выводят, и то, что пользователь вводит, отвечая на их вопросы. Вызовем autoexpect, передав этой утилите имя нашего скрипта: В этом режиме взаимодействие с bash-скриптом ничем не отличается от обычного: мы сами вводим ответы на его вопросы. Запуск bash-скрипта с помощью autoexpect В целом, за исключением некоторых деталей, перед нами такой же скрипт, который мы писали самостоятельно. Если запустить этот скрипт, результат будет тем же. Запуск expect-скрипта, созданного автоматически При записи сеансов взаимодействия с некоторыми программами, вроде FTP-клиентов, вы можете столкнуться с тем, что они используют в выводимых данных сведения о времени проведения операции, или выводят данные, отражающие процесс выполнения неких продолжительных действий. В целом, речь идёт о том, что вывод программы при каждом её запуске, правильно воспринимаемый человеком и вызывающий ввод одних и тех же ответов, будет, в тех же условиях, выглядеть по-новому для expect. Если в expect-скрипте строки, ожидаемые от такой программы, будут жёстко зафиксированы, такой скрипт не сможет нормально работать. Справиться с этим можно, либо удалив из expect-скрипта данные, которые выглядят по-новому при каждом запуске программы, либо использовав шаблоны, пользуясь которыми, expect сможет правильно понять то, что хочет от него программа. Как видите, autoexpect — это весьма полезный инструмент, но и он не лишён недостатков, исправить которые можно только вручную. Поэтому продолжим осваивать язык expect-скриптов. Работа с переменными и параметрами командной строкиДля того, чтобы получить доступ к аргументам командной строки, с которыми вызван expect-скрипт, можно поступить так: Expect-скрипт, использующий переменные и параметры командной строки Как видите, всё работает так, как ожидалось. Теперь expect-скрипт отвечает на вопросы bash-скрипта, пользуясь переданными ему параметрами командной строки. Ответы на разные вопросы, которые могут появиться в одном и том же местеЕсли автоматизируемая программа может, в одной ситуации, выдать одну строку, а в другой, в том же самом месте — другую, в expect можно использовать блоки, заключённые в фигурные скобки и содержащие варианты реакции скрипта на разные данные, полученные от программы. Выглядит это так: Здесь, если expect-скрипт увидит строку «something», он отправит ответ «send this». Если же это будет некая строка, оканчивающаяся на «another», он отправит ответ «send another». Тут мы генерируем случайное число при каждом запуске скрипта, и, проанализировав его, выводим один из двух вопросов. Для автоматизации такого скрипта нам и пригодится вышеописанная конструкция: Ответы на разные вопросы, появляющиеся в одном и том же месте Как видно, когда автоматизированный скрипт выводит строку, оканчивающуюся на «topic?», expect-скрипт передаёт ему строку «Programming». Получив в том же месте, при другом запуске программы, вопрос, оканчивающийся на «movie?», expect-скрипт отвечает: «Star wars». Это очень полезная техника. Условный операторExpect поддерживает условный оператор if-else и другие управляющие конструкции. Вот пример использования условного оператора: Условный оператор в expect Тут мы присваиваем переменной TOTAL некое число, после чего проверяем его и выводим текст, зависящий от результата проверки. Обратите внимание на конфигурацию фигурных скобок. Очередная открывающая скобка должна быть расположена на той же строке, что и предыдущие конструкции. Цикл whileЦиклы while в expect очень похожи на те, что используются в обычных bash-скриптах, но, опять же, тут применяются фигурные скобки: Цикл while в expect Цикл forЦикл for в expect устроен по-особому. В начале цикла, в самостоятельных парах фигурных скобок, надо указать переменную-счётчик, условие прекращения цикла и правило модификации счётчика. Затем, опять же в фигурных скобках, идёт тело цикла: Объявление и использование функцийExpect позволяет программисту объявлять функции, используя ключевое слово proc : Вот как выглядит expect-скрипт, в котором используется объявленная в нём же функция: Команда interactКогда выполняется эта команда, expect-скрипт переключается на чтение ответа на вопрос программы с клавиатуры, вместо того, чтобы передавать ей ранее записанные в нём данные. Вот bash-скрипт, в общем-то, точно такой же, как мы рассматривали ранее, но теперь ожидающий ввод пароля в ответ на один из своих вопросов: Напишем expect-скрипт, который, когда ему предлагают предоставить пароль, передаёт управление нам: Команда interact в expect-скрипте ИтогиВозможностями expect можно пользоваться в программах, написанных на разных языках программирования благодаря соответствующим библиотекам. Среди этих языков — C#, Java, Perl, Python, Ruby, и другие. То, что expect доступен для разных сред разработки — далеко не случайность. Всё дело в том, что это действительно важный и полезный инструмент, который используют для решения множества задач. Здесь и проверка качества ПО, и выполнение различных работ по сетевому администрированию, автоматизация передачи файлов, автоматическая установка обновлений и многое другое. Освоив этот материал, вы ознакомились с основными концепциями expect и научились пользоваться инструментом autoexpect для автоматического формирования скриптов. Теперь вы вполне можете продолжить изучение expect, воспользовавшись дополнительными источниками. Вот — сборник учебных и справочных материалов. Вот — достойная внимания серия из трёх статей (1, 2, 3). А вот — официальная страница expect, на которой можно найти ссылки на исходный код программы и список публикаций. На этом мы завершаем серию материалов о bash-скриптах. Надеемся, её одиннадцать частей, а также бессчётное число комментариев к ним, помогли в достижении цели тем, кто хотел научиться писать сценарии командной строки. Уважаемые читатели! Благодарим всех, кто был с нами. Желаем удачной автоматизации работы в Linux! И, если у вас есть опыт работы с expect — ждём ваших рассказов. Bash скрипт ввод пароля
Как в скрипте написать ввод пароля что бы команды после данной нормально отрабатывались.
Для ssh настройте авторизацию по ключам и не парьте мозг.
Вместо su используйте sudo. Там можно настроить вызов необходимых программ без запроса пароля. Если всё же хотите вводить пароль скриптом, то смотрите в сторону expect.
Expect мне помог, спасибо!
В сети полно примеров для ввода пароля ssh с помощью expect.
С этим все ок. Вот например кусок того что я сделал для примера. Автовход с паролем и управление по ssh «в гостях» при помощи expectВ очередной раз используя этот скрипт в одном из учебных классов, я поискал материалы и обнаружил, что здесь давно не вспоминали об expect. Это замечательный альтернативный интерпретатор для командной строки Linux, который может общаться с ней вместо живого человека, и я добавлю сюда лишь ещё один пример его применения. Картинок на эту тему особо нет, а в статье и вообще не будет, поэтому привлечём ваше внимание обложкой замечательной книги Немного истории и оффтопикаВ начале 2013го я вернулся в дополнительное образование детей, получил 24 часа еженедельной нагрузки для четырёх групп «юных программистов» и «юных системных администраторов», и приступил к набору учеников на двух площадках: моём собственном кабинете и кабинете информатики находящейся неподалёку гимназии. Силами групп «юных системных администраторов» мы привели свой кабинет в порядок, развернув AltLinux 6 и парочку альтернативных дистрибутивов. А в гимназии очень опытный «инженер компьютерного класса» давно вёл эксперименты с source-based, закончившиеся приходом Calculate Linux на все машины учителей и учебных классов. Респект ему) ЗадачаЧерез пару месяцев занятий я увидел проблему. Дети отказывались уходить с занятий, любым способом стараясь задержаться подольше. Т.к. педагогические технологии — это не моё, а кружок у нас всё-таки технический, я убивал сторонние процессы и выключал машины по ssh. Это повысило интерес учеников к изучению возможностей командной строки. Однако скоро они нашли баг: выключение «руками» занимает слишком много времени, и даже в небольшом кабинете они успеют перезапустить половину машин до того, как я завершу карательный процесс, и это затянет дело. Чтобы продемонстрировать Варианты решенияНулевой мыслью было использование italc, и мы даже уделили несколько недель его настройке и экспериментам. Но он оказался слишком глючен и примитивен, поэтому был благополучно забыт. Первой же мыслью было настроить доступ через ssh по отпечатку. Это сократило бы задачу до одного цикла, но для применения «на коленке» этот способ оказался не совсем пригоден (хотя почему нет? ЕМНИП, отпечаток для пользователя также можно создать без рута). Но при доступной авторизации по паролю (кстати, большой ущерб безопасности для учебных классов, где логин-пароли одинаковы) меня заинтересовал вариант с автоматической авторизацией по паролю. Уделив час поиску, я нашёл несколько примеров для expect. Решение через expectПеред началомНо, во первых, он должен быть установлен. В моём классе мы без труда сделали это, а вот в классе гимназии ВНЕЗАПНО оказалось, что и expect, и nmap, и некоторые другие интересные системные утилиты не только установлены, но и доступны ученику. Это очень помогло нам, когда в очередной раз «упал» прикрученный по NFS сетевой диск, и мы нашли способ распространения заданий через быстро найденный бухгалтерский компьютер с расшаренными дисками. Также необходимо помнить, что стандартно скрипт выпадает при возникновении первой же ошибки, например неответе компьютера клиента, и наверное стоит поискать способ обработки таких исключений. СкриптСообщаем, что для выполнения нам необходимо использовать нестандартный интерпретатор Задаём паузу для ожидания ответа с клиента, имя пользователя и пароль (это скорее по инерции из имеющихся в сети примеров): Это был простой скрипт автоубивания ненужных процессов для гимназии. В своём же кабинете я модифицировал скрипт и для автовыключения машин: ЗаключениеНадеюсь, упоминание замечательного интерпретатора expect и пара живых примеров по работе с ним будут полезны сообществу и породят немало статей о более тонких его применениях.
|