Hallo,

Ik wil met behulp van een php scriptje op Cisco devices checks gaan uitvoeren. Hierbij loop ik tegen het probleem aan dat het niet mogelijk lijkt meer commando's uit te voeren en/of output van individuele commando's ad te vangen.

In een specifiek voorbeeld wil ik op een Cisco ACE checken welke realservers offline zijn, bijvoorbeeld om ARP-FAILED of PROBE-FAILED. De beste methode die ik tot noch toe heb kunnen vinden is het script op http://www.phpfreaks.com/forums/index.php?topic=310877.0 en daar

PGWscripts("terminal length 0*changeto CONTEXTNAAM*show rserver|incl FAILED*");
uit te voeren. Die output moet ik dan weer als geheel interpreteren. Op zich niet zo'n probleem, maar het is zo omslachtig. Is het echt niet mogelijk om de ssh verbinding als object op zichzelf aan te spreken en van alleen een specifiek commando de output te lezen ? Zo kan ik in 1 run door de contexten bladeren en per context zien welke realservers failed zijn.

Ik heb ook wel wat gegoocheld met perl scripts, maar die lijken ook niet echt veel meer dan de overeenkomende php commando's te kunnen.

Ik hoor graag wat de specialisten op dit forum hier van vinden.

Marcus

[size=xsmall]Toevoeging op 27/03/2012 08:55:01:[/size]


Hallo,

Kleine aanvulling,. Een andere optie die ik geprobeerd heb ik zelf met de SSH2 module te spelen:


class sshconn {

   var $connection = false;
   var $messages = array();

   var $hostname = "";
   var $username = "";
   var $password = "";

   var $stderr = "";
   var $stdout = "";

   function __construct() {
   }



   function __destruct() {
   }



   function connect() {

      // Connect to host
      $ssh2 = ssh2_connect($this->hostname);
      if (!$ssh2) return true;

      // Login to host
      $ret = ssh2_auth_password($ssh2, $this->username, $this->password);
      if (!$ret) return false;

      // Execute a command to make sure we have output
      $stdio = ssh2_exec($ssh2, "");
      stream_set_blocking($stdio, true);

      // Remember our messages
      $this->stdout = stream_get_contents($stdio);
      $this->stderr = stream_get_contents(ssh2_fetch_stream($stdio, SSH2_STREAM_STDERR));
      fclose($stdio);

      // Remember our connection
      $this->connection = $ssh2;

      // Return with ALL OK
      return true;

   }



   function set_parameter($parameter, $value) {
      switch($parameter) {
      case "hostname": { $this->hostname = $value; return true; }
      case "username": { $this->username = $value; return true; }
      case "password": { $this->password = $value; return true; }
      default: { return false; }
      }
   }
      }
   }

   function get_last_message() {
      return $messages[0];
   }


   function execute($command) {

      $stdio = ssh2_exec($this->connection, $command);
      stream_set_blocking($stdio, true);

      // Remember our messages
      $this->stdout = stream_get_contents($stdio);
      $this->stderr = stream_get_contents(ssh2_fetch_stream($stdio, SSH2_STREAM_STDERR));

      return true;

   }


   function get_stdout($delete = true) {
      $message = $this->stdout;
      if ($delete) $this->stdout = "";
      return $message;
   }


   function get_stderr() {
      return $this->stderr;
   }


}



Maar dit loopt hopeloos stuk op het blocking mechanisme, welke juist nodig is om uberhaupt output terug te krijgen...

Marcus


[size=xsmall]Toevoeging op 27/03/2012 11:53:45:[/size]


Hi,

Zoveel specialisten en niemand heeft een idee ? Of is iedereen druk aan het coden om als eerste met DE oplossing te komen ? :)

Marcus


Echt niemand een idee ?

Reageren