Могу ли я передать bash аргументов ожидаемой среде? - PullRequest
0 голосов
/ 05 августа 2020

Мне нужно автоматизировать соединение openvpn с сервером, который требует от меня ввода пароля.

Я могу сделать это с ожиданием, но я не хочу, чтобы пароль оставался открытым текстом в скрипте.

Я нашел encpass , чтобы помочь зашифровать пароль, который мне просто нужен, и получить его, чтобы получить зашифрованную версию пароля.

Проблема возникает, когда я пытаюсь передать ожидаемый незашифрованный пароль. Насколько я понимаю, ожидать и bash - это 2 разные среды, а bash не может запускаться. На данный момент у меня есть следующее:

#!/usr/bin/env bash

source encpass.sh

password=$(get_secret)

{
    /usr/bin/expect <<EOF
    spawn openvpn /home/pi/client.ovpn
    expect "Enter Private Key Password:"
    send $password
    interact
EOF
}

Конечный результат: я запускаю это, и он запускает VPN, и сценарий вводит пароль в подсказке.

Если есть более простой способ сделать это, пожалуйста, дайте мне знать.

Я попытался автоматизировать это с помощью только openvpn и переключателя --auth-user-pass, указывающего на файл с паролем в нем, но я не смог пусть и это работает.

1 Ответ

2 голосов
/ 05 августа 2020

На ум приходят две идеи:

  1. если вы хотите встроить ожидаемый код в сценарий оболочки, используйте среду для передачи значений и используйте heredo в кавычках c, чтобы избежать цитируя ад (не забудьте нажать Enter для команды отправки)

    #!/usr/bin/env bash
    source encpass.sh
    password=$(get_secret)
    export password
    
    /usr/bin/expect <<'EOF'
        spawn openvpn /home/pi/client.ovpn
        expect "Enter Private Key Password:"
        send "$env(password)\r"
        interact
    EOF
    
  2. сделайте все в ожидании

    #!/usr/bin/env expect
    set password [exec bash -c {source encpass.sh && get_secret}]
    spawn openvpn /home/pi/client.ovpn
    expect "Enter Private Key Password:"
    send "$password\r"
    interact
    
...