繁体   English   中英

使用phpseclib在Laravel中进行实时SSH输出

[英]Real-time SSH output in Laravel with 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();
    }

您可以雇用一个回调。 例如。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM