LINUX.ORG.RU
решено ФорумAdmin

expect openvpn

 , , ,


0

1

Доброе... Для автоматического заведения пользователей в openvpn я дошел до expect'a ) Посчитал, сколько нужно раз вводить данные, получается 14 раз. В начале два пароля.

Вот написал такой скрипт:

#!/bin/bash
#!/usr/bin/expect
expect -c 'spawn ./build-key-pass tester9
exp_internal 1

expect password;
send password\n;
expect again;
send password\n;
expect continue;
send RU\r;
expect continue;
send SA\r;
expect continue;.
 send Sa\r;.
 expect continue;
  send Company\r;
  expect continue;
  send New\r;
  expect continue;
  send tester9\r;
  expect continue;
  send ServerName\r;
  expect continue;.
  send tester9@domen.rs\r;
  expect continue;
  send \r;
  expect continue;
  send \r;
  expect continue;.
   send yes\r;
   expect continue;
     send yes\r;'

но естественно, не работает)

Получаю такой бесконечный вывод на экран:

expect: does "Generating a 2048 bit RSA private key\r\n....................
...............+++\r\n.." (spawn_id exp4) match glob pattern "password"? no

подскажите пожалуйста, что не так?

Или скажите, где документация есть по expect'у

Меня вилимо гугл забанил), нашел только примеры. но они многие для ssh...

Какой принцип то?

Expect сначала перехватывает ввод. а потом даем свое значение?

и в чем разница между /n и /r n - перенос строки, типа Enter, а r? Спасибо.

\n - символ конца строки.

\r - символ возврата каретки.

В Linux в текстовых файлах строки оканчиваются символом конца строки.

В Windows оканчиваются двумя символами, символом возврата каретки и символом конца строки.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Понял... Мне нужен видимо первый, /n

Спасибо...

firefedot
() автор топика
Ответ на: комментарий от firefedot

На самом деле можно проще сделать, используя сгенерированный easy-rsa корень и голый openssl, дёргаемый скриптом на баше, если уж не хочешь нормальную инфраструктуру пилить или пользоваться вантузным УЦ, который у вас уже может быть установлен

anonymous
()

Сделал вот так:

#!/bin/bash
#!/usr/bin/expect
expect -c 'spawn ./build-key-pass tester9
send password\n
send password\n

interact
'
И пароль принял автоматом.

firefedot
() автор топика
Ответ на: комментарий от firefedot

Только не пойму как переменную передать внутрь expect'a...

Нашел такой пример передачи, но видкать не то нашел):

#!/bin/bash
#!/usr/bin/expect
export USER="userfree1"
echo "$USER"
expect -c 'spawn ./build-key-pass [lindex $USER 0]
interact
'

ошибка такая:

can't read "USER": no such variable 
    while executing
"lindex $USER 0"
    invoked from within
"spawn ./build-key-pass [lindex $USER 0]"

Не может прочитать переменную..

Как ее правильно переать?

Пробовал через другой файл и там его export. но результат тот же...

firefedot
() автор топика
Ответ на: комментарий от firefedot

В общем решил вопрос:

#!/bin/bash
#!/usr/bin/expect
export USER="userfree2"
echo "$USER"
expect -c 'spawn ./build-key-pass $env(USER)
...

Так переменные нормально передались. В общем, всем спасибо)

firefedot
() автор топика

Меж делом: man empty

IPR ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.