2017-06-28 3 views
1

Ich versuche, einen Datenstrom abzurufen, die von einer SSH-Verbindung kommt. Wenn ich Putty zum ssh in verwende, werde ich einfach anfangen, Daten auf dem Bildschirm zu bekommen, keine Befehle wurden benötigt.Get Datenstrom von SSH-Verbindung mit ssh2 auf PHP

Jetzt versuche ich das gleiche zu tun, aber in PHP, um die Daten zu manipulieren und in einer Datenbank zu speichern. Für diese Aufgabe habe ich bereits das notwendige Paket für ssh2 installiert und konnte eine Verbindung herstellen. Aber ich weiß nicht, wie ich diese Daten bekommen soll. Mein übergeordnetes Ziel ist es, dieses Skript als Daemon laufen zu lassen und ständig Informationen zum Speichern abzurufen.

Ich habe versucht mit ssh2_shell und verwenden Sie die zurückgegebene Stream-Ressource von Stream_get_contents aber es gibt false zurück.

$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'; 
} 

Und ich habe diese

$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); 

Antwort

0

es Bereitgestellt Anmerkungen wie pro Benutzer versucht, durchschaut hat! Der Trick ist das Timing. Die Shell muss Daten haben, um sie lesen zu können. Meistens verwenden Sie eine Shell, indem Sie Befehle senden und dann Daten von diesem Befehl lesen, aber in meinem Fall spuckt der Server nur Daten aus, also muss ich sleep(1) setzen, um den Puffer zu füllen.

Hier ist, was ich für eine Shell-Verbindung arbeiten muss, die immer Daten sendet.

$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++; 
} 

Weitere Informationen finden Sie unter PHP Programming/SSH Class.