簡體   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