我正在编写脚本来自动创建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"
答案 0 :(得分:1)
通过不将交互式shell与spawn / expect / send结合使用来解决此特定问题。直接使用CLI for OpenVPN(由build-key脚本调用的pkitool)可以毫无问题地创建文件。
所以语法是:
/etc/openvpn/easy-rsa/pkitool <clientname>