Получить поток данных из ssh-соединения, используя ssh2 на php

Я пытаюсь получить поток данных, поступающий из ssh-соединения. Когда я использую putty для входа по ssh, я просто начинаю получать данные на экране, никаких команд не требуется.

Теперь я пытаюсь сделать то же самое, но в php, чтобы манипулировать данными и сохранять их в базе данных. Для этой задачи я уже установил необходимый пакет для ssh2 и смог получить соединение. Но я не знаю, как получить эти данные. Моя общая цель состоит в том, чтобы этот скрипт работал как демон и постоянно извлекал информацию для сохранения.

Я пытался использовать ssh2_shell и использовать возвращаемый ресурс потока с помощью stream_get_contents, но он возвращает false.

$stdio_stream = ssh2_shell($connection);
$contents = get_resource_type ($stdio_stream);
echo $contents;
$contents = stream_get_contents ($stdio_stream);
if ($contents) {
    print_r($contents); 
} else {
    echo 'it failed';
}

И я пробовал это в соответствии с примечаниями пользователя.

$stdout_stream = ssh2_exec($connection, "/bin/ls -la /tmp");
$dio_stream = ssh2_fetch_stream($stdout_stream, SSH2_STREAM_STDIO);
$result_dio = stream_get_contents($dio_stream);

person jerrmhs    schedule 28.06.2017    source источник


Ответы (1)


Догадаться! Хитрость заключается в выборе времени. Оболочка должна иметь данные на нем для чтения. Большую часть времени, используя оболочку, вы отправляете команды, а затем читаете данные из указанной команды, но в моем случае сервер просто выдает данные, поэтому мне нужно поставить sleep(1), чтобы заполнить буфер.

Вот что я должен работать для соединения оболочки, которое всегда отправляет данные.

$sshConn=ssh2_connect($ipAddress, 22);
usleep(500);

ssh2_auth_password($sshConn,$userName,$password);
$shell = ssh2_shell($sshConn);
#   Here we are waiting for Shell to initialize
#   Increase this a bit if you get unexpected results
usleep(9000);
$count = 0;
while($count<3) { //run ten times
    sleep(1);
    while(($line = fgets($shell))) {
        echo "$line</br>";
    }
    $count++;
}

Дополнительную информацию см. в разделе курс PHP Programming/SSH.

person jerrmhs    schedule 01.09.2017