Net_SSH2无法在PHP中切换用户

Net_SSH2无法在PHP中切换用户,php,ssh,Php,Ssh,当我SSH到linux框中,然后尝试从该会话以另一用户身份登录时,我遇到了一个问题。在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 -&g

当我SSH到linux框中,然后尝试从该会话以另一用户身份登录时,我遇到了一个问题。在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在上运行命令,但当我尝试切换用户“sudosu”时,它将挂起在SSH2中,但这将在常规控制台上工作。为什么会发生这种情况?我该如何避免这种情况?

$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('username@username:~$');
$ssh->write("cd /var/www/site1\n");
echo $ssh->read('username@username:~$');
$ssh->write("sudo suo www-data\n");
echo $ssh->read('newuser@newuser:~$');
?>