【发布时间】:2015-08-24 09:54:07
【问题描述】:
我正在编写一个脚本来自动创建 OpenVPN 证书,以便将新客户端添加到 VPN 系统。我正在构建一个小型网页(全部是内部的,不能从 Internet 访问),以允许用户输入客户端名称,然后输出一个带有证书的 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"
【问题讨论】:
-
/etc/openvpn/easy-rsa/build-key脚本正在创建证书?通过直接写入文件?文件本身被截断了吗? -
是的,build-key 调用创建证书的 pkitool。它在 /etc/openvpn/easy-rsa/keys 目录中创建文件。从浏览器执行脚本时,这些文件确实被截断为 4096 个文件,而从终端它们很好。 See here绿色从终端执行,红色从浏览器执行。
-
ulimit在php产生的进程上?可以手动获取php让shell 创建大于4096 的文件吗? -
我创建了一个简单的 for 循环打印数字 1 - 5000,制作了一个 24k 字节的日志文件,这在浏览器和终端上都有效。 PHP.ini 的输出缓冲区关闭,ulimit -p 为 8
-
这里不需要
expect,因为您没有与程序交互。只需将答案传递给标准输入
标签: php bash ubuntu expect openvpn