我一直在尝试使用PHP的ssh2_exec命令在远程设备上执行两个或多个命令,但它似乎无法执行命令,等待响应和执行另一个。
我需要运行的第二个命令必须位于第一个命令的上下文中,因此必须在同一个shell中执行。我的意思是这样的
FWEFW # config system admin
此命令将带我进入" context"。结果将是:
FWEFW (admin) #
从这里开始,我想运行第二个可以设置密码的命令或(管理员)的其他字段
FWEFW (admin) # set password 'abcde'
这是我迄今为止所做的尝试:
$stream = ssh2_exec($con, 'config system admin');
stream_set_blocking($stream, TRUE);
$output = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
// After this, what can I do to stay in the same shell and execute the second command after "config system admin"?
答案 0 :(得分:0)
经过很多挫折后,我得出以下结论:
当您需要运行单个命令时,ssh2_exec命令很有用。就我而言,我需要在获得我需要的结果之前在同一个会话中运行多个命令。为了做到这一点,我就是这样做的:
创建交互式shell
$shell = ssh2_shell($connection, 'xterm', NULL, 400, 400, SSH2_TERM_UNIT_CHARS)
执行第一个命令
fwrite($shell, 'command 1' . PHP_EOL); // Don't forget PHP_EOL => /n
等待整个流
stream_set_blocking($shell, TRUE);
运行第二个命令
fwrite($shell, 'command 2' . PHP_EOL);
等等。我用四个命令测试了它,它运行得很好。
执行完所有命令后,您可以通过“访问shell”
来检索结果$data = "";
$buf = NULL;
while (! feof($shell))
{
$buf = fread($shell, 4096);
$data .= $buf;
}
fclose($shell);
您需要的数据现在存储在$ data变量中。 请注意,如果您的shell卡在提示符处(大多数情况下是这种情况),循环将永远运行,直到抛出超时错误。
为了解决这个问题,我必须运行'exit'命令才能退出shell。