php - php 7.2 上的连续命令 ssh2
问题描述
我正在尝试在 php 7.2 上使用 ssh2 在远程防火墙中运行一些命令。SSH 连接正常,但我的问题是在 fortigate 中不可能在一行中发送许多命令,这意味着不可能 "'$ command1'. ' && '.' $命令2'”。有一个代码可以帮助我发送 3 个连续命令,以便在同一会话中执行命令 1,然后执行命令 2,最后执行命令 3?
这是我的实际代码
<?php
$consulta1 = 'config firewall policy';
$consulta2 = 'edit 32';
$consulta3 = 'set status disable';
$consulta4 = 'end';
$connection = ssh2_connect('192.168.0.100', 22);
ssh2_auth_password($connection, 'user', 'pass');
$ejecucion = "$consulta1 ; $consulta2";
$stream = ssh2_exec($connection, $ejecucion);
stream_set_blocking($stream, true);
$datos = "";
while($buffer = fread($stream, 4096)){
$datos .= $buffer . "<br>";
echo $buffer;
}
fclose($stream);
ssh2_disconnect($connection);
?>
如果我发送 "'$ command1'.' && '.' $ command2 '" 作为 ssh 命令返回语法错误。那是因为 fortigate 不支持一行中的许多命令。
解决方案
我使用 ssh2_shell 解决了这个问题
<?php
$command_capture = "config firewall policy";
$command_capture1 = "edit 32";
$command_capture2 = "set status disable";
$command_capture3 = "end";
if (!($connection = ssh2_connect("192.168.0.100", 22))) {
echo "fail: unable to establish connection";
}
if (!ssh2_auth_password($connection, "ebravo", "P0werSW")) {
echo "fail: unable to authenticate";
}
$stream = ssh2_shell($connection);
fwrite($stream, $command_capture. PHP_EOL);
sleep(1);
fwrite($stream, $command_capture1 . PHP_EOL);
sleep(1);
fwrite($stream, $command_capture2 . PHP_EOL);
sleep(1);
fwrite($stream, $command_capture3 . PHP_EOL);
sleep(1);
$data="";
while($buf = stream_get_contents($stream)){
$data.=$buf;
}
echo $data;
fclose($stream);
?>
我在另一篇文章中找到了这段代码
推荐阅读
- php - 如何使用 Google Analytics Reporting API 从分析中获取增强型电子商务数据 - PHP
- java - 方法期望不是参数,但我需要传递一个整数
- javascript - Javascript 不会在动态内容上正确触发
- javascript - 如何计算对象列表中的真实属性值
- javascript - Blazor - JavaScript/Bootstrap 动画和脚本在 blazor 组件中不起作用
- java - StringBuilder 子字符串错误行为
- javascript - 在 React UI 中使用规范化的 Redux 状态之前,是否应该对其进行非规范化?
- excel - 有没有办法将通过电子邮件在 Outlook 中收到的 excel 报告自动发送到文件夹?
- sql-server - bcp out 默认排序,第一行和最后一行 par
- java - 分段上传失败