IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

SSH2 avec php : mode shell


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut SSH2 avec php : mode shell
    Bonjour,


    J'essaye de faire des connections ssh en php.
    L'ensemble fonctionne bien, mais j'ai un soucis lorsque je veux envoyer des commandes par ssh.

    En effet, j'envoie des commandes ssh par l'intermédiaire de la fonction "ssh2_exec" et cela fonctionne bien pour une commande, mais me renvoie "n'importe quoi" dès que j'augmente le nombre (à partir de 2).
    Pour se faire, j'ai décidé de passer à la commande "ssh2_shell", mais cela est encore pire : j'obtiens "Unable to request a channel from remote host" ou "Failed allocating vanilla pty at 80x25 characters".
    J'ai essayé différentes options (comme xterm ou bash en option de la commande), mais rien n'y fait.

    Je suis sous Ubuntu 9.10 avec Apache2 "standard".


    Merci par avance

  2. #2
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    mais me renvoie "n'importe quoi" dès que j'augmente le nombre (à partir de 2).
    De quel "nombre" parle-ont ?
    Un paramètre ou lorsque tu effectue une seconde commande ?


    Je te conseille aussi de lire les commentaire sur la fonction sur le site de PHP. Peut-être essaie-tu de transmettre une seconde commande avant que la première soit terminée ?
    http://php.net/manual/fr/function.ssh2-exec.php

  3. #3
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Citation Envoyé par FMaz Voir le message
    De quel "nombre" parle-ont ?
    Un paramètre ou lorsque tu effectue une seconde commande ?


    Je te conseille aussi de lire les commentaire sur la fonction sur le site de PHP. Peut-être essaie-tu de transmettre une seconde commande avant que la première soit terminée ?
    Salut,

    En fait, quand je disais "n'importe quoi (sur un pwd, puis un ls)", des fois j'obtiens rien ou l'un ou l'autre ou les deux.
    Comme j'avais vu que l'on ne pouvait faire qu'une commande avec ss2_exec (j'ai bien essayé avec un flush, mais pas d'amélioration), je me suis tourné vers ssh2_shell ; mais là, rien du tout.

    Bonne journée

  4. #4
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Pourtant dans les commentaires du manuel de PHP que je t'ai donné en lien, des gens semble effectuer de la bufferisation pour ne pas exécuter la seconde commande avant la fin de la première.

    Je vois pas trop d'ou tu sors cette limitation de "une seule commande"...

  5. #5
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Re,

    J'avais déjà fait un tour des différents exemples proposés (avant même de poster, histoire de ne pas trop déranger) et j'ai refait un tour, sans aucune amélioration.

    Cela dit, j'ai suivi le lien donné par un des derniers posts ; j'ai complété ma classe et là, j'obtiens de bien meilleurs résultats. Cependant, j'ai soit le bon résultat, soit un fatal error "Fatal error: Maximum execution time of 30 seconds exceeded".

    La chose avance, mais pas encore optimale et sûre à 100%.

  6. #6
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Re,

    Je pense avoir résolu mon problème.

    Le soucis venait de la fonction feof() de php qui peut rentrer en mode "boucle infinie".

    Du coup, au lieu d'un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while (!$this->feof())
      $buf .= $this->getStreamOutput();
    il faut faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
          while ($line=getStreamOutput())
          {
    	if($line)
    	  if(strlen($line)>0)
    	    $buf .= $line;
          }
    Cela résout quasiment tous mes soucis. De temps en temps, j'ai encore des retours de commandes tronqués ; j'ai pu constater que la taille du buffer donnait des résultats différents (quand j'aurais du temps, j'approfondiraisla chose).

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec php et shell
    Par lamou23 dans le forum Langage
    Réponses: 1
    Dernier message: 07/06/2010, 21h15
  2. lancer un script shell sur un serveur distant avec php
    Par MSM_007 dans le forum Langage
    Réponses: 1
    Dernier message: 03/05/2010, 11h32
  3. [Système] Exécution d'un script SHELL avec PHP
    Par diabli73 dans le forum Langage
    Réponses: 5
    Dernier message: 02/10/2008, 15h07
  4. communication GTK avec le mode shell
    Par alain6824 dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 15/01/2008, 22h15
  5. Zend Framework avec PHP en mode CGI
    Par charles.caron dans le forum Zend Framework
    Réponses: 4
    Dernier message: 06/06/2007, 13h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo