[PHP & SSH] ouvrir et fermer un processus

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par devphp, 8 Août 2011.

  1. devphp
    devphp Nouveau WRInaute
    Inscrit:
    8 Août 2011
    Messages:
    6
    J'aime reçus:
    0
    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:
    kill -9 N° PID
    
    Par contre au moment d'ouvrir un nouveau processus

    Code:
    ./sc_serv
    
    Et bien le processus ne s'ouvrir pas. :eek:

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

    Code:
    <?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:
    <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
     
  2. Axiso
    Axiso WRInaute passionné
    Inscrit:
    8 Avril 2004
    Messages:
    1 209
    J'aime reçus:
    0
    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.
     
  3. devphp
    devphp Nouveau WRInaute
    Inscrit:
    8 Août 2011
    Messages:
    6
    J'aime reçus:
    0
    Problème dans l'installation SSH Résolut merci
     
Chargement...
Similar Threads - [PHP SSH] ouvrir Forum Date
Astuce [PHP] Récolter ville, pays du visiteur Développement d'un site Web ou d'une appli mobile 9 Mars 2021
[PHPWhois.fr] Vérifiez la disponibilité d'un nom de domaine Demandes d'avis et de conseils sur vos sites 10 Décembre 2020
[PHP] Détecter le navigateur / bot en fonction du HTTP_USER_AGENT Développement d'un site Web ou d'une appli mobile 14 Septembre 2019
[PHP/MySQL] Choix du moteur MyISAM ou InnoDB ? Développement d'un site Web ou d'une appli mobile 14 Janvier 2017
[PHP] Détecter le navigateur / bot en fonction du HTTP_USER_AGENT Développement d'un site Web ou d'une appli mobile 12 Janvier 2017
[php/mysql] Eviter de faire 20 requêtes pour un affichage Développement d'un site Web ou d'une appli mobile 19 Janvier 2016
[PHP] Cookie vide dans une fonction, complet juste avant ou après Développement d'un site Web ou d'une appli mobile 25 Novembre 2014
[php] Cookie d'un domaine vers un sous-domaine Développement d'un site Web ou d'une appli mobile 29 Août 2014
[PHP]Cci mails Développement d'un site Web ou d'une appli mobile 18 Août 2014
[PHP] gethostbyname Développement d'un site Web ou d'une appli mobile 15 Février 2014