2017-06-28 14 views
1

ssh接続からのデータストリームを取得しようとしています。私がsshを使うためにパテを使うと、画面上のデータを取得するだけで、コマンドは必要ありません。ssh接続からのデータストリームをPHPのssh2を使って取得する

今私は同じことをやろうとしていますが、データを操作してデータベースに保存するために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

はそれを考え出しました!トリックはタイミングです。シェルは読むためにデータを持っていなければなりません。ほとんどの場合、コマンドを送信してからコマンドを実行しているシェルを使用していますが、私の場合はサーバがデータを吐き出しているので、バッファを埋めるために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 Classを参照してください。

関連する問題