使用phpseclib

时间:2018-07-25 06:12:58

标签: php laravel ssh real-time phpseclib

我尝试了不同的SSH库,但是它们在Laravel中似乎不太好用。由于我使phpseclib正常工作,因此我尝试坚持使用它。但是,我找不到从SSH连接获得实时输出的方法。

我计划运行的某些事情可能要花几个小时才能完成,但是所访问的软件始终会打印出我想用来显示在浏览器中的完成百分比。

目前,我有这个:

    <?php

    use phpseclib\Net\SSH2;
    use phpseclib\Crypt\RSA;

    $key = new RSA();
    $key->loadKey(file_get_contents('key.pem'));

    $command = 'ping google.com';

    $ssh = new SSH2('awesomeserver.com');

    if (!$ssh->login('username', $key))
    {
        echo 'Login Failed';
    }
    else
    {
        echo $ssh->exec($command);
    }

    ?>

这只是等待命令完成,然后将其全部倒入屏幕。

以前,在else括号中,我有         while(@ ob_end_flush());

    $proc = $ssh->exec($command);

    while(!feof($proc))
    {
        echo fread($proc, 4096);
        @ flush();
    }

但是,$proc仅被识别为字符串而不是资源,因此无效。

除了使用其他库以外,您还有其他建议吗?

谢谢!

编辑(部分解决方案):

我最终通过使用read()函数来使此脚本正常工作:         while(@ ob_end_flush());

    $ssh->write($command.'\n');

    while($read = $ssh->read())
    {
        echo $read;
        @ flush();
    }

1 个答案:

答案 0 :(得分:1)

您可以进行回叫。例如。

$ssh->exec('ping 127.0.0.1', function($output) {
    echo $output;
});