我了解了用于执行多个命令的工作脚本。该脚本以“命令”为索引,返回每个命令的输出数组。
注意: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