2012-10-27 42 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]:~$'); 
?>