0

リモートホストからの応答を実行して返そうとしていますがssh2_exec、これを行う適切な方法がわかりません。私は他の人が推奨したものに基づいてこの関数を一緒に使用しましたが、関数は に到達すると常にハングしstream_get_contents($errorStream);ます。

私が実行しているコマンドはls -l非常に迅速に実行されるはずです。

public function exec($command) 
{
    $stream = ssh2_exec($this->ssh, $command);

    if (! $stream) {
        throw new exception('Could not open shell exec stream');
    }
    $errorStream = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);

    stream_set_blocking($errorStream, true);
    stream_set_blocking($stream, true);

    $err      = stream_get_contents($errorStream);
    $response = stream_get_contents($stream);

    @fclose($errorStream);
    @fclose($stream);

    if ($err) {
        throw new exception($err);
    }

    return $response;
}
4

2 に答える 2

1

コマンドの出力のサイズが 64KB に達すると、関数 ssh2_exec() がハングすることがわかりました (私の Linux dev ボックスの数値とまったく同じです)。

回避する 1 つの方法は、次を使用することです。

$stream = ssh2_exec($this->ssh, $command);

if (! $stream) {
    throw new exception('Could not open shell exec stream');
}

stream_set_timeout($stream, 10);
于 2014-06-26T06:58:36.177 に答える
0

正直なところ、純粋なPHPSSH実装であるphpseclibを使用します。例えば。

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

echo $ssh->exec('ls -l');
于 2013-01-31T18:38:05.820 に答える