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