Bash 脚本将输出文件截断为 4096 字节

Bash script truncates output files at 4096 bytes

我正在编写一个脚本来自动创建 OpenVPN 证书,以将新客户端添加到 VPN 系统。我正在构建一个小网页(所有内部网页,无法从 Internet 访问)以允许用户输入客户端名称,然后出现一个带有证书的 zip 文件,将其放在新的客户端电脑上(通过 Teamviewer)。

脚本(和网页)从 Ubuntu 14.04 服务器,运行ning 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 
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) \[\]:}       { send \"\r\" }
expect {Name \[EasyRSA\]:}                                                  { send \"\r\" }
expect {Email Address \[me@myhost.mydomain\]:}                              { 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"

此特定问题已通过不将交互式 shell 与 spawn/expect/send 结合使用得到解决。直接使用 OpenVPN 的 CLI(pkitool,由构建密钥脚本调用)创建文件没有任何问题。

所以语法是:

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