Phpseclib SSH2不执行Shell脚本

时间:2017-10-19 16:59:29

标签: php ajax bash ssh phpseclib

目前正在尝试创建一个PHP Web应用程序来运行各种Shell脚本来处理网站生成和删除时的清理。

这是 deletePropertyProcess.php 的摘录:

$ssh = new Net_SSH2($server);

if(!$ssh->login("username", "password")) {
  $result['result'] = 'ERROR';
  $result['message'] = 'Login failed to server ' . $server;
} else {
  $result = $ssh->exec("cd /var/www/sites ; sudo /usr/local/bin/delete_property_folder.sh -c $comp -p $prop");
  echo $result;
}

delete_property_folder.sh是我的远程服务器上的bash脚本,而-c $comp -p $prop是我的脚本选项/参数。

有趣的是,所有这一切都通过Putty完美无缺。通过Ajax从PHP运行此功能将返回Shell脚本的退出状态和Ajax的预期输出,但我的Shell脚本处理的所有更改都不会实际应用。

就像我说的那样,这完全来自Putty,所以我怀疑问题是Shell脚本,但不管怎么说:

#!/bin/bash

function fix_file_permissions() {
    chown -Rf username:username $1/$2

    echo $?;
}

function delete_specified_folder() {
    rm -rf $1/$2

    echo $?;
}

##Main Script Body
POSITIONAL=()
while [[ $# -gt 0 ]]
do
    key="$1"

    case $key in
        -c|--company)
            COMPANY="$2"
            shift
            shift
        ;;
        -p|--property)
            PROPERTY="$2"
            shift
            shift
        ;;
        *) #unknown option
            POSITIONAL+=("$1") #save it in an array for later
            shift
        ;;
    esac
done
set -- "${POSITIONAL[@]}" #restore positional parameters

PERMISSIONS_FIXED=$(fix_file_permissions $COMPANY $PROPERTY)
if [ $PERMISSIONS_FIXED -eq 0 ]; then
    FOLDER_DELETED=$(delete_specified_folder $COMPANY $PROPERTY)
    echo $FOLDER_DELETED
    exit
fi
echo 1

此时,任何建议都会有用。如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

我已经设法通过使用以下内容将--STDIN的sudo密码提供给Shell脚本的完整路径来实现它:

$result = $ssh->exec("cd /var/www/sites; echo 'password' | sudo -S /usr/local/bin/delete_property_folder.sh -c $comp -p $prop");

echo - 使用sudo -S密码允许您通过管道将密码传递给sudo shell脚本执行。