【发布时间】: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