2016-07-26 45 views
1

我使用phpseclib從php調用ssh命令。如何使用phpseclib以root權限運行ubuntu命令

$ip = 'ip_address'; 
$login = 'user'; 
$password = 'password'; 
$ssh = new SSH2($ip); 
$ssh->login($login, $password); 

在下面的例子一切正常(因爲我不需要權限):

$command = 'ip addr flush dev eth1'; 
$result = $ssh->exec($command); // result = 'Failed to send flush request: Operation not permitted' 

我嘗試使用sudo蘇登錄:在下面的例子中發生

$command = 'ifconfig'; 
$result = $ssh->exec($command); // result = 'eth0 ..., eth1 etc.' 

問題:

$result = $ssh->read('$'); // result = '..... [email protected]:~$' 
$result = $ssh->write("sudo su\n"); //result = true 
$result = $ssh->read(':'); // result = 'sudo su\n [sudo] password for user:' 
$result = $ssh->write($password."\n"); // result = true 
$result = $ssh->read('#'); //result = '[email protected]:/home/user# 

看來t帽子一切都沒問題(我在根),但:

$command = 'ip addr flush dev eth1'; 
$result = $ssh->exec($command); // result = 'Failed to send flush request: Operation not permitted' 

問題在哪裏?先謝謝你!

+0

嘗試在sudoers文件中添加自己,然後只需鍵入sudo,然後按命令(不需要插入密碼) –

+0

'su'已經是suid二進制文件。沒有必要運行'sudo',因爲它總是以root身份運行。 –

+0

我在終端上試過這樣的東西:'adduser user sudo',結果是: '用戶'用戶'已經是'sudo''的成員。接下來,我只在終端中使用'su',結果是:'密碼: su:認證失敗' – Krzychu

回答

1

我用下面的代碼http://mrbluecoat.blogspot.com/2014/03/running-sudo-commands-with-phpseclib.html

$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$ssh->write("sudo YOUR COMMAND HERE\n"); 
$ssh->setTimeout(10); 
$output = $ssh->read('/.*@.*[$|#]|.*[pP]assword.*/', NET_SSH2_READ_REGEX); 
if (preg_match('/.*[pP]assword.*/', $output)) { 
    $ssh->write($sudo_password."\n"); 
    $ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
} 

和它的作品!

+0

應該不需要執行'$ ssh-> setTimeout(10)'。 – neubert

0

您需要爲root用戶組添加httpd進程(apache,php)。子進程可以使用root perm運行。

相關問題