尝试多线程SSH连接

时间:2018-06-16 14:02:57

标签: php phpseclib php-pthread

我有一堆服务器,我最终创建了一个php脚本来ssh我的所有服务器,收集最后一个日志条目并将所有结果插入到数据库中。

我正在使用phpseclib连接到服务器,并且它一个接一个地工作正常,但因为我有很多它们,但我为什么不使用线程呢?

嗯,我不太清楚我在这里失踪了什么,但到目前为止我得到了什么。在线程之外一切正常,但是一旦我编写NET_SSH2->登录,一切都下降了,没有任何作用。

我的代码在哪里找到我遗漏的线索?

由于

<?php 
set_time_limit(0);
include('Net/SSH2.php');

class poller extends Thread{

private $tid;
private $tip_array;
public $tresult;

public function __construct($tid,$tip_array)
{
    $this->tid = $tid;
    $this->tip_array = $tip_array;
}

public function run()
{
    $i=1;
    foreach ($this->tip_array as $ip){
        $temp_result[$i][0]=$ip;
        $ssh = new Net_SSH2($ip[0]);
        if (!$ssh->login('user', 'pass')) {
             $temp_result[$i][1]= $ssh->isConnected() ? 'bad username or password' : 'unable to establish connection';
        }           
        $temp_result[$i][2]=$ssh->exec(' grep "Device" syslog.messages | tail -1'); 
        $i++;
    }
    $this->tresult=$temp_result;
} 
}

$i=1;
$rows=array(array("1.1.1.1", "2.2.2.2"), array("3.3.3.3", "4.4.4.4"));

foreach ($rows as $row){
    $threads[$i] = new poller($i,$row);
    $threads[$i]->start();
    $i++;
}

foreach ($threads as $thread)
{
    $thread->join();
    echo '############Thread'.$thread->tid.'############';
    print_r($thread->tresult);
    echo '##############################';
}
?>

0 个答案:

没有答案