PHP shell_exec()不会像bash一样给出相同的结果

时间:2017-12-17 20:36:43

标签: php linux bash sysadmin

问题:来自bash文件的回声不能识别PHP。 echo是文件名,并被发送回Web服务器以进行重定向。

它的工作原理如下:

访问网站上的PHP文件并运行此代码:

<?php
$output=shell_exec("sshpass -p [serverpass] ssh root@[serverip] 'sh         
 /var/www/[bashfile].sh'");

$vpn="http://[serverip]/".$output.".ovpn";
$string = trim(preg_replace('/\s+/', '', $vpn));
header('Location: '.$string);
?>

当我跑步时

sshpass -p [serverpass] ssh root@[serverip] 'sh /var/www/auto.sh'

在网络服务器上的bash中,它运行回声。但是,当使用php [filename].php执行时,它不会。

这是服务器上的bash代码w / bash(不是webserver):

#!/bin/sh

newclient () {
    if [ -e /home/$1 ]; then
            homeDir="/home/$1"
    elif [ ${SUDO_USER} ]; then
            homeDir="/home/${SUDO_USER}"
    else
            homeDir="/root"
    fi
    cp /etc/openvpn/client-template.txt $homeDir/$1.ovpn
    echo "<ca>" >> $homeDir/$1.ovpn
    cat /etc/openvpn/easy-rsa/pki/ca.crt >> $homeDir/$1.ovpn
    echo "</ca>" >> $homeDir/$1.ovpn
    echo "<cert>" >> $homeDir/$1.ovpn
    cat /etc/openvpn/easy-rsa/pki/issued/$1.crt >> $homeDir/$1.ovpn
    echo "</cert>" >> $homeDir/$1.ovpn
    echo "<key>" >> $homeDir/$1.ovpn
    cat /etc/openvpn/easy-rsa/pki/private/$1.key >> $homeDir/$1.ovpn
    echo "</key>" >> $homeDir/$1.ovpn
    echo "key-direction 1" >> $homeDir/$1.ovpn
    echo "<tls-auth>" >> $homeDir/$1.ovpn
    cat /etc/openvpn/tls-auth.key >> $homeDir/$1.ovpn
    echo "</tls-auth>" >> $homeDir/$1.ovpn
}

                    var=`date +%s%N`
                    cd /etc/openvpn/easy-rsa/
                    ./easyrsa build-client-full $var nopass
                    newclient "$var"
                    mv ~/$var.ovpn /var/www/$var.ovpn
                    echo "$var"
exit
;;

0 个答案:

没有答案