首页 > 解决方案 > 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 不支持一行中的许多命令。

标签: phpssh2

解决方案


我使用 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);
    ?>

我在另一篇文章中找到了这段代码


推荐阅读