我得到了一个用于执行多个命令的工作脚本。此脚本将每个命令的输出返回到数组中,并按“命令”索引。
注意:ssh2_cmd() 不适用于多个命令,因此使用 ssh2_shell()。请注意不同操作系统上的 EOL(行结束符)。我在每个命令的末尾使用了“\n”,但可能还有其他选项,例如“<br>”、“;”等;
$connection = ssh2_connect($input_host_ip, 22);
if (false === $connection) {
error_log("ERROR 函数 SSH_UMTELECOM:连接失败!\n",3,$log_file);
exit();
}else{
if($debugar){error_log("SSH_UMTELECOM:成功连接到 $input_host_ip!\n",3,$log_file);}
$auth = @ssh2_auth_password($connection, $user, $pass);
if (false === $auth) {
error_log("ERROR 函数 SSH_UMTELECOM:$input_host_ip 上的身份验证失败(用户:$user)!\n",3,$log_file);
exit();
}else{
if($debugar){error_log("SSH_UMTELECOM:成功连接到 $input_host_ip!\n",3,$log_file);}
error_log("启动流:$connection\n",3,$log_file);
$output_array = array();
$shell = ssh2_shell($connection, 'vt100');
foreach($input_cmd as $cmd){
if($debugar){error_log("shell:$cmd\n",3,$log_file);}
$output_stream = ""; # 清空每次迭代的变量
fwrite($shell, "$cmd\n"); # 不要忘记在每个命令末尾加上“\n”
#stream_set_blocking($shell, true); # 不起作用,无限期等待
sleep(2); # 对于高延迟网络,等待 2 秒
while($output_streams = fgets($shell)){
$output_stream .= $output_streams;
flush();# 清空内容以进行下一次迭代
}
$output_array[] = $output_stream; # 将每个返回值合并到其相应的命令中
}
fclose($shell); # 优雅地退出 shell
}# 结束 if false === $auth
}# 结束 if false === $conenection