2017-10-19 108 views
2

當前嘗試創建一個PHP Web應用程序來運行各種Shell腳本來處理網站生成和清除刪除。Phpseclib SSH2不執行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腳本處理的更改。

就像我說的,這從膩子運行完美,所以我懷疑問題是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

我設法通過使用以下命令通過--STDIN提供sudo密碼來工作: '$ result = $ ssh-> exec(「cd/var/www/sites; echo password | sudo -S /usr/local/bin/delete_property_folder.sh -c $ comp -p $ prop「);' –

+0

你不說你的代碼是如何失敗的,或者你運行它時會發生什麼。究竟發生了什麼?你有沒有收到任何錯誤信息? – Kenster

+0

對於這個例子,如果你看看Bash腳本,你會發現它只是回顯一個值。乾淨利落。 「有趣的是,所有這些都可以通過Putty完美地工作。通過Ajax從PHP運行此功能將返回Shell腳本的退出狀態以及Ajax的預期輸出,但實際上並未應用Shell腳本處理的更改「。 意思是我的shell腳本(即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"); 

echosudo -S -ing您的密碼,您可以通過您的通過管道密碼進入sudo shell腳本執行。

+0

問題在於,有時腳本的輸出包含來自sudo提示符的文本......不知道如何抑制這一點。奇怪的是,只發生在一些腳本上。 –