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

时间:2015-06-09 14:05:56

标签: php bash ubuntu expect openvpn

我正在编写脚本来自动创建OpenVPN证书,以便将新客户端添加到VPN系统。我正在建立一个小网页(所有内部网站,不能从互联网上接近),以允许用户输入客户端名称,然后输出带有证书的zip文件,放在新的客户端PC上(通过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 \[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"

1 个答案:

答案 0 :(得分:1)

通过不将交互式shell与spawn / expect / send结合使用来解决此特定问题。直接使用CLI for OpenVPN(由build-key脚本调用的pkitool)可以毫无问题地创建文件。

所以语法是:

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