【问题标题】:PHP ssh2_shell execute command and get responsePHP ssh2_shell 执行命令并获得响应
【发布时间】:2015-10-07 01:44:22
【问题描述】:

我正在连接到 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。如果命令花费的时间超过一秒钟,我将不会得到结果。如果命令不到一秒,我就浪费时间了。

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

基本上,我如何使用 ssh2_shell,发送命令并获得该命令的响应,无论需要多长时间,而不需要在 shell 返回其内容后通过请求阻塞流的内容来使脚本超时?

【问题讨论】:

    标签: php linux bash shell libssh2


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 1970-01-01
      相关资源
      最近更新 更多