2012-10-27 74 views
0

我遇到了一個問題,當我SSH進入Linux的盒子,然後嘗試從該會話另一個用戶登錄。在PHP中它總是掛起。Net_SSH2無法在PHP中切換用戶

Example: 
//Connect to server using pem files 
$key = new Crypt_RSA(); 
$key->loadKey($options['pem_file']); 
$ssh = new Net_SSH2($host); 
$ssh->login($user, $key); 

//This command works 
$ssh -> exec("cd /var/www/site1"); 

//This hangs indefinitely but will work on the command line 
$ssh -> exec("sudo suo www-data"); 

總之,我正在使用pem文件連接到服務器。我可以在使用exec時運行命令,但是當我嘗試切換用戶「sudo su」時,它將掛在SSH2上,但是這可以在常規控制檯上運行。爲什麼會發生這種情況,我該如何解決這個問題?

回答

1

$ ssh-> exec()不是「常規控制檯」。它在命令完成運行時返回命令的輸出。但如果命令沒有完成呢?

您應該試試$ ssh-> write()/ $ ssh-> read()來代替。例如。

一個例子:

<?php 
include('Net/SSH2.php'); 

$ssh = new Net_SSH2('www.domain.tld'); 
if (!$ssh->login('username', 'password')) { 
    exit('Login Failed'); 
} 

echo $ssh->read('[email protected]:~$'); 
$ssh->write("cd /var/www/site1\n"); 
echo $ssh->read('[email protected]:~$'); 
$ssh->write("sudo suo www-data\n"); 
echo $ssh->read('[email protected]:~$'); 
?>