[PHP & SSH] ouvrir et fermer un processus

devphp
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 6
Inscription: 8 Aoû 2011

[PHP & SSH] ouvrir et fermer un processus

Message le Lun Aoû 08, 2011 13:03

Bonjour à tous,

Petit soucis avec SSH2 en PHP

J'ai besoin de fermer ou d'ouvrir une application sur le serveur.
J'ai déjà dégoté une class (ci-joint) qui se charge de la connexion SSH et des commandes.

J'arrive à lister les processus, fermer le processus si il est ouvert grâce au PID et à la commande

Code: Tout sélectionner
kill -9 N° PID


Par contre au moment d'ouvrir un nouveau processus

Code: Tout sélectionner
./sc_serv


Et bien le processus ne s'ouvrir pas. :o

Voici mon script et la class qui va avec...

Code: Tout sélectionner
<?php
/* ************************************************************ */
/*
*   Copyright (C) 2008 Volkan KIRIK
*
*    This program is free software: you can redistribute it and/or modify
*    it under the terms of the GNU General Public License as published by
*    the Free Software Foundation, either version 3 of the License, or
*    (at your option) any later version.
*
*    This program is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*    GNU General Public License for more details.
*
*    You should have received a copy of the GNU General Public License
*    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
*/
/* ************************************************************ */
/*
*   SSH - SFTP (class.shell2.php)
*   v 1.0 2007-08-13
*   v 1.1 2008-05-19 -current-
*
*   Author : Volkan KIRIK
*
*   Changes in v1.1:
*
*   * Added Disconnect function
*   * Some function names changed:
*   auth to auth_pwd
*   send to send_file
*   get to get_file
*   output to get_output
*
*   Changes in v1.0:
*
*   * First release
*
*/
/* ************************************************************ */

class shell2 {
var $conn;
var $error;
var $stream;

function __destruct(){
$this->disconnect();
}

function login($user, $pass, $host, $port=22) {
   if ($this->connect($host,$port)) {
      if ($this->auth_pwd($user,$pass)) {
         return true;
      } else {
         return false;
      }
   } else {
      return false;
   }
}

function connect($host,$port=22) {
   if ($this->conn = ssh2_connect($host, $port)) {
      return true;
   } else {
      $this->error = '[x] Can not connected to '.$host.':'.$port;
      return false;
   }
}

function auth_pwd($u,$p) {
   if (ssh2_auth_password($this->conn, $u, $p)) {
      return true;
   } else {
      $this->error = 'Login Failed';
      return false;
   }
}

function send_file($localFile,$remoteFile,$permision) {
   if (@ssh2_scp_send($this->conn, $localFile, $remoteFile, $permision)) {
      return true;
   } else {
      $this->error = 'Can not transfer file';
      return false;
   }
}

function get_file($remoteFile,$localFile) {
   if (ssh2_scp_recv($this->conn, $remoteFile, $localFile)) {
      return true;
   } else {
      return false;
   }
}

function exec_cmd($cmd) {
   $this->stream=ssh2_exec($this->conn, $cmd);
   stream_set_blocking( $this->stream, true );
}

function get_output() {
   $line = '';
   while ($get=fgets($this->stream)) {
      $line.=$get;
   }
   return $line;
}

function disconnect() {
   // if disconnect function is available call it..
   if ( function_exists('ssh2_disconnect') ) {
      ssh2_disconnect($this->conn);
   } else { // if no disconnect func is available, close conn, unset var
      @fclose($this->conn);
      unset($this->conn);
   }
   // return null always
   return NULL;
}
}

?>



Code: Tout sélectionner
<pre>
<?php
$host = "127.0.0.1";
$user = "user";
$pass = "password";

$localFile="/home/test1.txt";
$remoteFile="/home/test2.txt";



$ssh = new shell2; // init class

// connect server
if ( $ssh->login($user,$pass,$host) ) {
echo '<h1>Connection </h1>';

//SSH Command
$ssh->exec_cmd("ls & cd webradio");
echo $ssh->get_output();
$ssh->exec_cmd("cd webradio");
echo $ssh->get_output();   
$ssh->exec_cmd("ps -x");
// Enregistrement du processus
$process = $ssh->get_output();

// Suppréssion des espaces
$process=preg_replace('/\s\s+/', ' ', $process);

echo $process;

if (preg_match('#(.*)?(./sc_serv)#Ui', $process, $m)) {
   preg_match('#(.*) #Ui', $m[0], $c);
   echo "J'ai trouv&eacute; ce PID " . $c[1] . "<br />";
   $ssh->exec_cmd("kill -9 ".$c[1]);
   echo "J'ai tu&eacute; ce PID " . $c[1] . "<br />";
   $ssh->exec_cmd("ps -x");
   echo $ssh->get_output();   
} else {

   echo  "Ah !!! Je n'ai pas trouv&eacute;.<br /><br />";
   echo  "Je d&eacute;marre ./sc_serv<br />";
   
   $ssh->exec_cmd("./sc_serv");
   echo $ssh->get_output();
   
   $ssh->exec_cmd("ps -x");
   echo $ssh->get_output();   
}

} else {
echo '<h1>Erreur</h1>' . $ssh->error;
}

?>
</pre>


Je tiens à préciser, que personnellement je ne connais pas encore SSH, je fais juste ce script pour un ami.
Toute aide, explication est la bienvenue.

Un grand merci d'avance


Axiso
WRInaute impliqué
WRInaute impliqué
 
Messages: 594
Inscription: 8 Avr 2004

Re: [PHP & SSH] ouvrir et fermer un processus

Message le Mar Aoû 09, 2011 8:56

Es-tu bien sûr que tu tentes d'exécuter "./sc_serv" dans le contexte correct, c'est à dire celui de son répertoire ? Tente l'affichage d'un "pwd" avant de lancer "./sc_serv".
Et est-ce que ton processus ne se lancerait pas pour s'interrompre aussitôt ? Ce qui ne te laisserait pas le temps de le visualiser en cours de fonctionnement.

devphp
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 6
Inscription: 8 Aoû 2011

Re: [PHP & SSH] ouvrir et fermer un processus

Message le Mar Aoû 09, 2011 19:42

Problème dans l'installation SSH Résolut merci


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités