在php上使用ssh2从ssh连接获取数据流

时间:2017-06-28 17:17:15

标签: php ssh libssh2

我正在尝试检索来自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);

1 个答案:

答案 0 :(得分:0)

想出来!诀窍是时机。壳牌必须有数据才能阅读。大多数情况下使用shell发送命令然后从所述命令读取数据,但在我的情况下,服务器只是将数据吐出,所以我必须放sleep(1)来填充缓冲区。

以下是我必须为始终发送数据的shell连接工作。

$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 Class