2013-07-30 91 views
0

我有一個shell腳本makedir.sh,如下所示。使用ssh2_exec遠程執行sh腳本時PHP不工作

sudo -H sh -c ' 
    mkdir /usr/local/testdir; 
    if [ $? -eq 0 ];then 
     echo "Successfull"; 
    else 
     echo "Unsuccessfull"; 
    fi 
' 

我已經給權限的用戶testuser的使用sudo來執行shell腳本,但沒有問password.For這個我添加了以下行/etc/sudoers文件,

testuser ALL=(ALL) NOPASSWD: ALL 

和它的作品罰款,我可以使用sudo運行命令,但不需要詢問密碼。上面的shell腳本也可以正常工作,不需要詢問密碼,在/usr/local內部創建目錄testdir。我的問題從這裏開始。我想從php文件運行這個shell腳本。在當前場景中,shell腳本位於IP地址爲10.3.2.0的遠程計算機上。以下是我的php代碼,但在運行此php代碼時,它不會在/usr/local/內部創建任何目錄(testdir)。請告知,因爲我很初學PHP

PHP代碼

<?php 
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist"); 
if(!($con = ssh2_connect("10.3.2.0", "22"))) 
{ 
    echo "fail: unable to establish connection"; 
} 
else 
{ 
    if(!ssh2_auth_password($con, "testuser", "abcdef")) 
    { 
     echo "fail: unable to authenticate "; 
    } 
    else 
    { 
     $stream = ssh2_exec($con, "./makedir.sh"); 
      stream_set_blocking($stream, true); 
     $item = ""; 
     while ($input = fread($stream,4096)) { 
       $item .= $input; 
     } 
     echo $item; 
    } 
} 

?> 

SHELL SCRIPT - makedir.sh(駐留在10.3.2.0 - 與上述相同外殼腳本)

#!/bin/sh 
sudo -H sh -c ' 
    mkdir /usr/local/testdir; 
    if [ $? -eq 0 ];then 
     echo "Successfull"; 
    else 
     echo "Unsuccessfull"; 
    fi 
' 

感謝。

回答

0

從我所知道的,sudo命令不工作從PHP的ssh2模塊。您將需要以具有該目錄權限的用戶身份進行連接。

0

嗯...問題是一年前的xD,但我仍然可以halp 使用sudo與ssh2_exec你需要一個小動作。它是不安全的,不推薦使用,但如果你沒有其他選擇使用

ssh2_exec($connection, "echo sudopw | yourscript.sh" . PHP_EOL); 

和你的腳本必須調用須藤的說法-S

"sudo -S mkdir folder" 

應該工作