Я пишу скрипт для автоматизации создания сертификатов 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"
Эта конкретная проблема решается, если не использовать интерактивную оболочку в сочетании с порождением / ожиданием / передачей Использование CLI для OpenVPN напрямую (pkitool, который вызывается скриптом ключа сборки) создает файлы без каких-либо проблем.
Таким образом, синтаксис будет:
/etc/openvpn/easy-rsa/pkitool <clientname>
Других решений пока нет …