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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

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

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

Оффлайн Azure

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

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 118
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #31 : 21 Апрель 2017, 23:56:01 »
expect "Write password to*" - если используется регулярное выражение в шаблоне , рекомендуют делать приблизительно так
(Нажмите, чтобы показать/скрыть)

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

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

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

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5332
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #32 : 22 Апрель 2017, 00:11:11 »
Написал же
скобки
does "    \r\nWrite password to /home/alex/.vnc/passwd-test?  [y]/n " (spawn_id exp6) match glob pattern "(Write password to)*"? no
« Последнее редактирование: 22 Апрель 2017, 00:14:29 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн renzrv

  • Старожил
  • *
  • Сообщений: 1837
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #33 : 22 Апрель 2017, 00:53:22 »
#!/bin/bash

mkdir ~/.vnc
mkdir ~/lamp-5

/usr/bin/expect <<\EOF
set timeout 2
set dir "$env(HOME)/.vnc/passwd-test"
set pass "12345678"
spawn x11vnc -storepasswd $dir
expect "Enter VNC password:"
send "$pass\r"
expect "Verify password:"
send "$pass\r"
expect { "(Write password to)*"
    {
        send "y\r"
    }
}
EOF

?
Скрипты на bash,sh,perl,awk + разная помощь (в ЛС)

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 118
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #34 : 22 Апрель 2017, 10:09:33 »
Вот полностью рабочий код

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

Только такая концовка скрипта отрабатывается без ошибок

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



Пользователь добавил сообщение 22 Апрель 2017, 10:10:23:
Цитировать
expect { "(Write password to)*"
    {
        send "y\r"
    }
}
EOF

не работает

Цитировать
скобки

я выше написал, что делал так

Код: Bash
  1.  
  2. ...
  3. expect "Write password to*"
  4. send "y\r"
  5. send "exit\r"
  6. #expect eof  
  7. EOF

Выдает ошибку

И вопросы:

1. Объясните как работает перенапраление к маркеру EOF (почему так и никак иначе),
  я не нашел объяснения как и похожего кода в связке с expect
2. Зачем экранировать EOF ?
3. Почему между маркерами  EOF должен заключаться код ?
4. Почему нужно отправить команду send "exit\r"
5. А это почкму обязательно expect eof ?
 



Пользователь добавил сообщение 22 Апрель 2017, 10:45:00:
Цитировать
Команда expect определяют когда текущий процесс завершился и подразумевается выполнение закрытия.
Команда expect ожидает пока один из образцов (pat) не будет соответствовать выводу порождённого процесса, или пока не истечёт определённый период времени, или достигнут конец-файла (eof).

???
« Последнее редактирование: 22 Апрель 2017, 10:45:00 от alex-sky »

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5332
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #35 : 22 Апрель 2017, 11:51:18 »
я выше написал, что делал так
expect "Write password to*"
send "y\r"
Выдает ошибку
Какую? И можно привести «расширенный вывод» как в этом сообщении?
Зачем задавать воросы и спрашивать советов, если Вы их не слушаете/слышите?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alex-sky

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

Код, при котором появляется данная ошибка

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


Расширенный вывод

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

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5332
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #37 : 22 Апрель 2017, 12:13:52 »
Ну и с какой радости Вы вставили пробелы перед «EOF»?

Пользователь добавил сообщение 22 Апрель 2017, 12:17:52:
Почему Вы не хотите вставить это в код expect
dir=~/.vnc
mdir=~/lamp-5
 
[ -d "$dir" ] || mkdir "$dir";
[ -d "$mdir" ] || mkdir "$mdir";
и получить нормальный expect-код без выкрутасов с HEREDOC?
Код: TCL
  1. #!/usr/bin/expect
  2.  
  3. set pass "12345678"
  4. set myhome $env(HOME)
  5. send "mkdir -p $myhome/lamp-5 $myhome/.vnc\r"
  6. spawn x11vnc -storepasswd $myhome/.vnc/passwd-test
  7. while {1} {
  8.     expect {
  9.         "Write*"       {
  10.             send "y\r"
  11.             send "exit\r"
  12.             break
  13.         }
  14.         "password:"    {send "$pass\r"}
  15.     }
  16. }
  17. wait
  18. close $spawn_id
« Последнее редактирование: 22 Апрель 2017, 12:45:05 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 118
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #38 : 22 Апрель 2017, 13:04:57 »
Почему Вы не хотите вставить это в код expect'а

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

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

А раздельное выполнение команд под root и под пользователем в одном скрипте, как можно оформить (можете просто указать конкретную статью)
« Последнее редактирование: 22 Апрель 2017, 13:08:28 от alex-sky »

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5332
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #39 : 22 Апрель 2017, 13:17:18 »
Я вопросы задаю (так много)
Тогда хотя бы ответы читайте
Цитата: alex-sky
Затем указал строку
mkdir "/home/alex/lamp"
send "mkdir '/home/alex/lamp'\r"

Пользователь добавил сообщение 22 Апрель 2017, 13:24:58:
все нужно быстро освоить
Быстро не выйдет, т.к. надо внимательно, бех этого не обойдешься, а тут проблема
с какой радости Вы вставили пробелы перед «EOF»?
А раздельное выполнение команд под root и под пользователем в одном скрипте
Стараются не делать, так как это потенциальная «дырка» в безопасности системы.
Посоветую как и всем новичкам: не пытайтесь строить «велосипед» и не обсуждайте синтаксис/методы способа решения задачи — скорее всего выбранный способ изначально неправильный, начинайте с задачи: обычно уже есть готовое красивое решение.
« Последнее редактирование: 22 Апрель 2017, 13:24:58 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 118
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #40 : 22 Апрель 2017, 22:32:31 »
Ошибка в 4-й строке

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

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5332
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #41 : 22 Апрель 2017, 22:52:36 »
Ошибка в 4-й строке
Кавычки забыл… :(
Код: TCL
  1. set myhome "$env(HOME)"
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 118
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #42 : 23 Апрель 2017, 13:25:32 »
Тогда появляются другие ошибки

Вот исправленный код

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

Вот ошибки

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

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5332
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #43 : 23 Апрель 2017, 14:08:57 »
Давайте посмотрим подробно с exp_internal 1
И почему у Вас весь код сдвинут вправо? + какие-то «левые» символы?
« Последнее редактирование: 23 Апрель 2017, 14:15:50 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн renzrv

  • Старожил
  • *
  • Сообщений: 1837
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #44 : 23 Апрель 2017, 19:49:57 »
И почему у Вас весь код сдвинут вправо? + какие-то «левые» символы?
Движок форума добавляет при копировании.
Приходится каждый раз делать:
sed -i 's/^    //' скрипт.sh
alex-sky,
Вот:
#!/bin/bash

mkdir ~/.vnc
mkdir ~/lamp-5

expect <<\EOF
set timeout 2
set dir "$env(HOME)/.vnc/passwd-test"
set pass "12345678"
spawn x11vnc -storepasswd $dir
expect "Enter VNC password:" {send "$pass\r"}
expect "Verify password:" {send "$pass\r"}
expect "Write password to*" {send "y\r"}
sleep 1
close $spawn_id
EOF
Праверил, работает.
Скрипты на bash,sh,perl,awk + разная помощь (в ЛС)

 

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