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>
我正在编写一个脚本来自动创建 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>