Попытка многопоточного соединения SSH

У меня есть куча серверов, и я решил создать 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 '##############################';
}
?>

«все падает и ничего не работает». Что ты имеешь в виду? У вас есть ошибки или что-то в этом роде? Вместо понимания того, что вы имеете в виду, похоже, могут помочь файлы журнала SSH. Вы можете получить их, выполнив сначала define('NET_SSH2_LOGGING', 2), а затем $ssh->getLog() для каждого экземпляра Net_SSH2. Мне также интересно, возможно ли, что Thread не работает с fsockopen, что phpseclib использует под капотами для реализации SSH.

neubert 17.06.2018 16:49

Привет, Neubert, спасибо за ответ. Я думаю, что вы абсолютно правы, phpseclib действительно использует fsockopen, поэтому я думаю, что это было бы бесполезно. Я постараюсь найти альтернативу.

Bob Morane 18.06.2018 18:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
325
0

Другие вопросы по теме