当我通过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时运行命令但是当我尝试切换用户“sudo su”时,它将挂起在SSH2中,但这将在常规控制台上运行。为什么会发生这种情况,我该如何解决这个问题?
答案 0 :(得分: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('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:~$');
?>