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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

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

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

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #30 : 21 Апреля 2017, 22:27:40 »
А откуда Вы эти скобки вообще взяли?
Код: (bash) [Выделить]
expect "Write password to*"
send "y\r"
# не забывайте про \r в конце строки, перед кавычками.
EOF
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alex-sky

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

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

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

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

Оффлайн Azure

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

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #33 : 21 Апреля 2017, 23: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

?

Оффлайн alex-sky

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

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

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

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



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

не работает

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

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

Код: (Bash) [Выделить]

...
expect "Write password to*"
send "y\r"
send "exit\r"
#expect eof 
EOF

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

И вопросы:

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



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

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

Оффлайн Azure

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

Оффлайн alex-sky

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

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

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


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

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

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #37 : 22 Апреля 2017, 11:13:52 »
Ну и с какой радости Вы вставили пробелы перед «EOF»?

Пользователь добавил сообщение 22 Апреля 2017, 11:17:52:
Почему Вы не хотите вставить это в код expect
dir=~/.vnc
mdir=~/lamp-5
 
[ -d "$dir" ] || mkdir "$dir";
[ -d "$mdir" ] || mkdir "$mdir";
и получить нормальный expect-код без выкрутасов с HEREDOC?
Код: (tcl) [Выделить]
#!/usr/bin/expect

set pass "12345678"
set myhome $env(HOME)
send "mkdir -p $myhome/lamp-5 $myhome/.vnc\r"
spawn x11vnc -storepasswd $myhome/.vnc/passwd-test
while {1} {
    expect {
        "Write*"       {
            send "y\r"
            send "exit\r"
            break
        }
        "password:"    {send "$pass\r"}
    }
}
wait
close $spawn_id
« Последнее редактирование: 22 Апреля 2017, 11:45:05 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alex-sky

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

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

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

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

Оффлайн Azure

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

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

Оффлайн alex-sky

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

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

Оффлайн Azure

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

Оффлайн alex-sky

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

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

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

Вот ошибки

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

Оффлайн Azure

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

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #44 : 23 Апреля 2017, 18: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
Праверил, работает.

 

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