PHP ssh2_shell执行命令并获得响应

时间:2015-07-17 10:49:00

标签: php linux bash shell libssh2

我正在连接到ssh服务器并使用ssh2_shell创建一个交互式bash shell。

我遇到的问题是如何向shell发送命令并准确获取命令的响应。

这就是我目前正在做的事情:

$stream = ssh2_connect();
$shell = ssh2_shell($stream, 'bash');

fwrite($shell, "whoami\n");
fwrite(STDOUT, fread($shell, 2048) . PHP_EOL);

上面代码的问题是输出到STDOUT(对于命令行视图)显示类似Last login to server etc..的欢迎消息。我必须等待一两秒,然后再次从shell中读取以获取我发送的命令的输出。

现在我可以在发送任何命令后执行sleep(1)来解决这个问题,但这非常hacky。如果命令花费的时间超过一秒,我将无法得到结果。如果命令花了不到一秒钟,我就浪费时间了。

我在编写命令并调用stream_set_blocking($shell, true)之前尝试fread但问题仍然存在,除非我在命令之后睡觉。

基本上,我如何使用ssh2_shell,发送命令并获取该命令的响应,而不管它将花费多长时间,而不是在shell返回其内容后通过请求阻塞流的内容来超时脚本? / p>

1 个答案:

答案 0 :(得分:0)

您描述的是ssh2_shell的预期行为 - 它是交互式的。这意味着你需要处理超时。

如果您希望在远程主机上执行命令或脚本并只接收其输出,则需要非交互式执行 - ssh2_exec。