2017-10-19 29 views
2

현재 웹 웹 생성 및 삭제시 처리를 처리하기 위해 다양한 쉘 스크립트를 실행하는 PHP 웹 응용 프로그램을 만들려고합니다.Phpseclib SSH2에서 쉘 스크립트를 실행하지 않음

$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 내 스크립트 옵션/매개 변수입니다 :

은 여기 내 deletePropertyProcess.php에서 미리보기입니다.

재미있는 부분은이 모든 것이 완벽하게 퍼티를 통해 작동한다는 것입니다. PHP에서 Ajax를 통해이 기능을 실행하면 쉘 스크립트의 종료 상태와 Ajax의 예상 결과가 반환되지만 쉘 스크립트에서 처리 한 변경 사항은 실제로 적용되지 않습니다.

이 시점에서
#!/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 스크립트를 보면 값을 반향하는 것만 알 수 있습니다. 평범하고 단순합니다. "재미있는 부분은 퍼티를 통해 완벽하게 작동합니다 .Ajax를 통해 PHP에서이 기능을 실행하면 쉘 스크립트의 종료 상태와 Ajax의 예상 결과가 반환되지만 쉘 스크립트에서 처리 한 변경 사항은 실제로 적용되지 않습니다 . " 의미 올바른 출력 값이 쉘 스크립트 (즉, 0)에 의해 반환되지만 원격 서버의 모든 변경 사항에는 영향을 미치지 않습니다. 그것은 모두 거기에 ... –

답변

0

내가 그것을 다음과 같은 사용하여 쉘 스크립트의 전체 경로에 --stdin 옵션을 통해 sudo는 암호를 공급함으로써 작업 얻을 관리했습니다 :

$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 셸 스크립트를 실행합니다.

+0

이 문제는 스크립트의 출력에 sudo 프롬프트의 텍스트가 포함되는 경우가 있습니다 ... 이것을 억제하는 방법을 모르십니까? 일부 스크립트에서만 이상하게 발생합니다. –