Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Автоматизация ввода пароля в скрипте bash..  (Прочитано 2057 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 118
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #15 : 21 Апрель 2017, 10:12:34 »
Запускать нужно без указания интерпритатора (sh), т.к он указан в шабанге (первая строка).
Спасибо, часть ошибок исправлена. Запустил так:
./test.shНо в 41 строке вот такоe
(Нажмите, чтобы показать/скрыть)

Вот эта строка вызывает ошибку
Код: HTML
  1. expect  "(yes/no)?*"
expect  "(yes/no)?*"{
  send "yes\r"
  # не забывайте про \r в конце строки, перед кавычками.
                      }

Код полностью
(Нажмите, чтобы показать/скрыть)

Пользователь добавил сообщение 21 Апрель 2017, 10:13:02:
А сам expect установлен?
да, сразу установил

Нашел, ошибка в регулярном выражении, так как x11vnc выдает совсем другой запрос,
и отправлять ответ на запрос, можно просто - y

Неправильно:expect  "(yes/no)?*"{
  send "yes\r"
  # не забывайте про \r в конце строки, перед кавычками.
                      }         
Вот такая строка получается, которую выдает программа x11vnc
Код: HTML
  1. Write password to /home/alex/.vnc-test/passwd3?  [y]/n

Как посоветуете оформить регулярное выражение, написать шаблон для этой строки...


Пользователь добавил сообщение 21 Апрель 2017, 11:39:18:
Оформил регулярное выражение и немного переделал скрипт:
(Нажмите, чтобы показать/скрыть)

Вопрос: Почему expect - не принимает вот такой путь?
Код: HTML
  1. set dir "~/.vnc-test/passwd4"

Пришлось исправить на полный
Код: HTML
  1. set dir "/home/alex/.vnc-test/passwd4"

Поясните пожалуйста, может есть решение?


« Последнее редактирование: 21 Апрель 2017, 14:23:43 от Azure »

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5244
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #16 : 21 Апрель 2017, 14:17:07 »
expect - не принимает вот такой путь
Код: HTML
  1. set dir "~/.vnc-test/passwd4"
«~» это расширение bash и естественно expect его не понимает. Попробуйте системную переменную $HOME
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 118
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #17 : 21 Апрель 2017, 15:15:46 »
«~» это расширение bash и естественно expect его не понимает. Попробуйте системную переменную $HOME

Сделал так

set dir "$HOME/.vnc/passwd-test"
получил ошибку

Цитировать
can't read "HOME": no such variable
    while executing
"set dir "$HOME/.vnc/passwd-test""
    (file "./test.sh" line 20)

Пользователь добавил сообщение 21 Апрель 2017, 15:23:08:
Добавил в начало скрипта вот так

#!/usr/bin/expect -f
#!/bin/bash

Затем указал строку

mkdir "/home/alex/lamp" # тестовая команда на создания каталога

Но была выдана еще одна ошибка
(Нажмите, чтобы показать/скрыть)

Как совместить выполнение команд  Bash и Tcl (утилита - expect )в одном скрипте ???
« Последнее редактирование: 21 Апрель 2017, 15:23:08 от alex-sky »

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5244
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #18 : 21 Апрель 2017, 15:36:35 »
Добавил в начало скрипта
Нет. Интерпретатор может быть только один: или тот, или тот.
Как совместить выполнение команд  Bash и Tcl
Делаете bash-скрипт в который включаете команду(-ы) expectexpect <<\EOF
set timeout 2

EOF

Пользователь добавил сообщение 21 Апрель 2017, 15:42:22:
set dir "$HOME/.vnc/passwd-test"
set dir "\$HOME/.vnc/passwd-test"или Ъ-wayset dir "$env(HOME)/.vnc/passwd-test"
Пользователь добавил сообщение 21 Апрель 2017, 15:46:18:
Затем указал строку
Код: HTML
  1. mkdir "/home/alex/lamp"
send "mkdir '/home/alex/lamp'\r"
« Последнее редактирование: 21 Апрель 2017, 15:46:18 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 118
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #19 : 21 Апрель 2017, 16:15:33 »
Не работает, выдается ошибка

set dir "\$HOME/.vnc/passwd-test"

Работает

set dir "$env(HOME)/.vnc/passwd-test"
Скрипт привожу полностью;
создается все, но появляется ошибка


(Нажмите, чтобы показать/скрыть)

Ошибка

(Нажмите, чтобы показать/скрыть)

Оффлайн renzrv

  • Старожил
  • *
  • Сообщений: 1735
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #20 : 21 Апрель 2017, 16:43:08 »
Ну написали же:
expect <<\EOF
код expect…
EOF
и ЕМНИП все $ в коде expect нужно экранировать: \$, т.к без этого все переменные будет подставлять баш а не expect.

Пользователь добавил сообщение 21 Апрель 2017, 16:52:43:
Все $ кроме переменных баша.
« Последнее редактирование: 21 Апрель 2017, 16:54:06 от renzrv »

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 118
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #21 : 21 Апрель 2017, 17:04:52 »
ЕМНИП все $ в коде expect нужно экранировать: \$, т.к без этого все переменные будет подставлять баш а не expect.

Не обязательно в данном случае это делать, если так сделать то вывод будет подставляться название переменной а не ее значение, я проверил, это неудобно

Цитировать
expect <<\EOF
код expect…
EOF


Я так и сделал, только включил весь код, в конце скрипта написал expect eof
 если указать дополнительно EOF  , появится ошибка

(Нажмите, чтобы показать/скрыть)

Если не видели, код привожу полностью и прячу под спойлер.
« Последнее редактирование: 21 Апрель 2017, 17:06:40 от alex-sky »

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5244
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #22 : 21 Апрель 2017, 17:06:32 »
нужно экранировать: \$
Не нужно, потому как <<\

Пользователь добавил сообщение 21 Апрель 2017, 17:09:44:
конце скрипта написал expect eof
Зачем? Если уже exit?
« Последнее редактирование: 21 Апрель 2017, 17:09:44 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6939
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #23 : 21 Апрель 2017, 17:12:06 »
Но зачем автоматизировать ввод пароля? Либо делайте нормальные права скрипту, если ему необходимо работать от рута, либо смотрите в сторону систем управления конфигурациями, рекомендую Ansible.

Оффлайн renzrv

  • Старожил
  • *
  • Сообщений: 1735
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #24 : 21 Апрель 2017, 17:39:04 »
Не нужно, потому как <<\
var=abc

cat <<\EOF
$var
"$var"
EOF

$var
"$var"

var=abc

cat <<EOF
$var
"\$var"
EOF

abc
"$var"

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 118
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #25 : 21 Апрель 2017, 17:53:43 »
Но зачем автоматизировать ввод пароля? Либо делайте нормальные права скрипту, если ему необходимо работать от рута

Я же написал зачем..
 Чтобы при создании различных конфигураций с x11vnc, XRDP и т.д., скрипт выполнял рутинную работу по созданию тестовых и не только машин, некоторые программы при установки своих параметров работают в интерактивном режиме, никакие права не позволят автоматизировать это...

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


Пользователь добавил сообщение 21 Апрель 2017, 18:29:42:
Зачем? Если уже exit?

Сделал концовку скрипта такой
...
send "exit\r"
EOF

Все равно появляется эта ошибка

Цитировать
./bash.sh: строка 61: внимание: документ неожиданно заканчивается на строке 9 (ожидалось `EOF')
spawn x11vnc -storepasswd /home/alex/.vnc/passwd-test
Enter VNC password: 12345678

Verify password:   
Write password to /home/alex/.vnc/passwd-test?  [y]/n invalid command name "EOF"
    while executing
"EOF "

Но программа отрабатывает свою функцию.

 Почему возникает данная ошибка, как исправить ???
« Последнее редактирование: 21 Апрель 2017, 18:29:42 от alex-sky »

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5244
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #26 : 21 Апрель 2017, 19:47:20 »
Код: Bash
  1. expect "(Write password to)*"
  2.     {  send "y\r"
  3.  # не забывайте про \r в конце строки, перед кавычками.
  4.     }
  5. EOF
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 118
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #27 : 21 Апрель 2017, 22:41:35 »
Код: Bash

    expect "(Write password to)*"
        {  send "y\r"
     # не забывайте про \r в конце строки, перед кавычками.
        }
    EOF

Исправил так как вы написали

Вот полный код

(Нажмите, чтобы показать/скрыть)

Выполняется только та часть скрипта, которой управляет bash, пароль не создается , так как появилась новая ошибка

(Нажмите, чтобы показать/скрыть)

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5244
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #28 : 21 Апрель 2017, 23:02:23 »
/usr/bin/expect<<\EOF
Пробелы куда исчезли?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 118
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #29 : 21 Апрель 2017, 23:11:16 »
Вернул пробел

/usr/bin/expect <<\EOF

Но ошибка не исчезла

 

Страница сгенерирована за 0.311 секунд. Запросов: 23.