Скрипт Bash усекает выходные файлы до 4096 байт

Я пишу скрипт для автоматизации создания сертификатов OpenVPN, для добавления новых клиентов в систему VPN. Я создаю небольшую веб-страницу (все внутренние и недоступные из Интернета), чтобы позволить пользователям вводить имя клиента, и выходит zip-файл с сертификатами для размещения на новом клиентском компьютере (через Teamviewer).

Сценарий (и веб-страница) работают с сервера Ubuntu 14.04, на котором работают OpenVPN и Observium.

Когда я выполняю этот скрипт из терминала, он работает отлично, и сертификаты создаются красиво.

Когда я запускаю этот скрипт из браузера, выполняемого командой PHP:

shell_exec("sudo <path to script>/<script>.sh $clientname");

Сертификаты обрезаются на 4096 байт. Безошибочно. Сертификаты должны быть около 5600 байт. При открытии сертификаты заметно обрезаются (отсутствуют закрывающие теги).

Что вызывает это? Что я должен сделать, чтобы решить это?

Сценарий выглядит следующим образом:

#!/bin/bash
cd /etc/openvpn/easy-rsa/
source /etc/openvpn/easy-rsa/vars

expect -c "spawn /etc/openvpn/easy-rsa/build-key $1
expect {Country Name (2 letter code) \[US\]:}                               { send \"\r\" }
expect {State or Province Name (full name) \[CA\]:}                         { send \"\r\" }
expect {Locality Name (eg, city) \[SanFrancisco\]:}                         { send \"\r\" }
expect {Organization Name (eg, company) \[Fort-Funston\]:}                  { send \"\r\" }
expect {Organizational Unit Name (eg, section) \[MyOrganizationalUnit\]:}   { send \"\r\" }
expect {Common Name (eg, your name or your server's hostname) \[$1\]:}       { send \"\r\" }
expect {Name \[EasyRSA\]:}                                                  { send \"\r\" }
expect {Email Address \[[email protected]\]:}                              { send \"\r\" }
expect {A challenge password \[\]:}                                         { send \"\r\" }
expect {An optional company name \[\]:}                                     { send \"\r\" }

expect {Sign the certificate? \[y/n\]:}                                     { send \"y\r\" }
expect { commit? \[y/n\]}                                                   { send \"y\r\" }

expect {Data Base Updated}
interact"

2

Решение

Эта конкретная проблема решается, если не использовать интерактивную оболочку в сочетании с порождением / ожиданием / передачей Использование CLI для OpenVPN напрямую (pkitool, который вызывается скриптом ключа сборки) создает файлы без каких-либо проблем.

Таким образом, синтаксис будет:

/etc/openvpn/easy-rsa/pkitool <clientname>
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]