[PHP & SSH] Caractère étrange

coccoweb Messages postés 155 Statut Membre -  
coccoweb Messages postés 155 Statut Membre -
Bonjour,

Je m'en remet à vous, car je suis dans l'impasse.

Je souhaite ouvrir des fichiers (un par un xD ) bash depuis PHP
J'y arrive, installation complète, mais il m'affiche ceci

 ~ sc_serv  
v  
D#J"¢II5%>¨äZb--QIJ'í_  
 ~ ~Ì  
sc_serv.conf  
f  
D#J"¢I5%>¨äZb--QQJ'í_  
 ~  
sc_serv.conf


Une idée ? Voici le code

<?php  
$connection = ssh2_connect('127.0.0.1', 22);  
ssh2_auth_password($connection, 'test', 'test');  

$stream = ssh2_shell($connection, 'vt102', null, 80, 24, SSH2_TERM_UNIT_CHARS);  
fwrite( $stream, 'ls');  
while($o=fgets($stream)){  
echo $o.'<br>';  
}  
?>  


3 réponses

  1. coccoweb Messages postés 155 Statut Membre 27
     
    up
    0
  2. jeanjean_ac Messages postés 32 Statut Membre
     
    C'est pas des données pour le rendu du shell ça ? Genre des couleurs ou d'autres meta données ?

    Tu va peut-être devoir les virer toi même. Ou alors il faut passer par l'argument term_type de la fonction ssh2_shell, et indiquer un type qui soit en text/plain.
    0
  3. coccoweb Messages postés 155 Statut Membre 27
     
    Les terminaux que je connais, me renvois la même erreur:
    j'ai essayé vanilla, vt102, xterm

    PS : J'ai update ma librairie

    que je joint

    <?php 
    class SSH {
    private $conn; // Connection 
    private $log=array(); // Event log
    private $stream;
    private $debug=false;
    
    public function __construct($user, $pass, $host, $port=22) {
    	if ($this->connect($host,$port)) {
    		if (@$this->auth_pwd($user,$pass)){
    			return true;
    		} else {
    			return false;
    		}
    	} else {
    		return false;
    	}
    }
    /*** Connection SSH ***/
    public function connect($host,$port=22) {
    	if ($this->conn = ssh2_connect($host, $port)) {
    	$this->log[] = 'Connection succes to '.$host.':'.$port;
    		return true;
    	} else {
    	$this->log[] = 'Connection faild to '.$host.':'.$port;
    		return false;
    	}
    }
    /*** Login SSH ***/
    public function auth_pwd($user,$pass) {
    	if (ssh2_auth_password($this->conn, $user, $pass)) {
    	$this->log[] = 'Login succces by '.$user;
    		return true;
    	} else {
    	$this->log[] = 'Login faild by '.$user;
    		return false;
    	}
    }
    
    /*** Open shell ***/
    public function shell($term_type='vt102', $env=NULL, $width=80, $height=24)
    {
    $this->stream = ssh2_shell($this->conn, $term_type, $env, $width, $height, SSH2_TERM_UNIT_CHARS);
    $this->log[] = 'Open shell with PARAM ' . $term_type . ' ' .$env . ' ' .$width . ' ' .$height;
    }
    
    /*** Run a command ***/
    public function cmd($cmd)
    {
    if (!empty($this->stream))
    {
    $this->log[] = 'Run cmd : ' . $cmd;
    fwrite($this->stream, $cmd . PHP_EOL);
    sleep(1);
    }
    else
    {
    $this->log[] = 'Shell not run : exit';
    $this->disconnect();
    }
    
    
    }
    
    
    /*** Return log debuging ***/
    function log($print=false)
    {
    	if ($print == false)
    	{
    	return $this->log;
    	}	
    	else
    	{
    	echo '<pre>';
    		foreach ($this->log as $key => $value)
    		{
    		echo $key . ' : ' . $value . PHP_EOL;
    		}
    	echo '</pre>';
    	}
    }
    
    
    /*** Print terminal return ***/
    public function get()
    {
    $stderr_stream = ssh2_fetch_stream($this->stream, SSH2_STREAM_STDERR);
      while (!feof($stdout_stream)) {
            echo fgets($stdout_stream, 128);
        }
    }
    
    
    /***
    Debug switch 
    for call log() after disconnection
    ***/
    public function debug()
    {
    $this->debug = true;
    }
    
    /*** Deconnexion ***/
    public function disconnect() {
    	// if disconnect function is available call it..
    	if ( function_exists('ssh2_disconnect') ) {
    	$this->log[] = 'Disconnect by funct ssh2_disconnect';
    		ssh2_disconnect($this->conn);
    	} else { // if no disconnect func is available, close conn, unset var
    	$this->log[] = 'Disconnect by fclose';
    		@fclose($this->conn);
    		unset($this->conn);
    	}
    	if ($this->debug == true){$this->log(true);}
    	// return null always 
    	return NULL;
    }
    
    /*** Destruction de class ***/
    public function __destruct(){
    $this->disconnect();
    }
    
    }
    
    
    
    $ssh = new SSH('user', 'pass', '127.0.0.1');
    $ssh->debug();
    $ssh->shell();
    $ssh->cmd('ps');
    $ssh->get();
    $ssh->cmd('ls');
    $ssh->get();
    ?>
    
    
    0