[RESOLU] Statut connexion ssh

Eléphanteau du PHP | 18 Messages

13 sept. 2014, 00:01

Bonjour/Bonsoir à tous,

J'ai fait un petit système pour lister diférent serveur connecter via ssh pour une panel de serveur de jeux, pour ajouté les machines et les lister sur le panel pas de problème.
Le problème survient au moment de savoirs si la machine est connecter en ssh ou non j'ai fait un teste avec 2 machines l'une est connecter en ssh l'autre est bidon mais le statut de la second machine ( bidon) me dit qu'elle est connecter.
Un petit sreen
Image


Le code php:
<?php

App::uses('AppController','Controller');
class MachinesController extends AppController{

  public function admin_index(){
		$this->layout='admin';
		$this->loadModel('Machine');
		$Machines = $this->Machine->find('all');
		$this->set(compact('Machines'));
		$connect = $this->Machine->find('all');
		 foreach ($connect as $k => $v){

		
		$connection = ssh2_connect($v['Machine']['ssh_ip'], $v['Machine']['ssh_ports']);

		if (ssh2_auth_password($connection, $v['Machine']['ssh_users'], $v['Machine']['ssh_password'])) {
  		$connect = true;
			} else {
  					$connect = false;
		}
						$this->set(compact('connect'));
		
	}

}

	public function admin_edit($id=null) {

	}

}

  


?>
Ma question:
Comment faire un System pour avoir l'état de connexion de chaque machine ?

Merci
Cordialement
TheSkinLine01

ViPHP
ViPHP | 1996 Messages

13 sept. 2014, 18:26

Essayes de voir si elles répondent avec fsockopen() par exemple
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 18 Messages

14 sept. 2014, 03:28

Salut :)

Et bien c'est le même chose, la fonction fonctionne bien vus quand quand je vire la machine bidon j'ai aucune erreur quand je chance les info de connexion j'ai des erreurs donc sa fonctionne bien pour sa.
Par contre quand j'ai 2 machine les statut sont ' connecter ' alors quille y a que une machine sur 2 qui devrait être connecter
Le code:
<?php

App::uses('AppController','Controller');
class MachinesController extends AppController{

  public function admin_index(){
		$this->layout='admin';
		$this->loadModel('Machine');
		$Machines = $this->Machine->find('all');
		$this->set(compact('Machines'));
		$connecte = $this->Machine->find('all');
		foreach ($connecte as $k => $v){

		
		

		if (fsockopen($v['Machine']['ssh_ip'],$v['Machine']['ssh_ports'], $v['Machine']['ssh_users'], $v['Machine']['ssh_password'])) {
  		$connecte = true;
			} else {
  					$connecte = false;
		}
						$this->set(compact('connect'));
		
	}

}

	public function admin_edit($id=null) {

	}

}

  


?>
et j'envoie aussi le code html/php quille y a dans la vue: *
<section id="title" class="emerald">
        <div class="container">

            <div class="row">
                <div class="col-sm-9">
                    <h1>Administration</h1>
                    <p>Gestion des machines</p>
                </div>
                <div class="col-sm-6">
                   
                </div>
            </div>
        </div>
    </section>
    <div class="container"><!--/#title-->     
<div class="row">
  <table class="table table-striped">
    <thead>
        <tr>
            <th>ID</th>
            <th>Nom</th>
            <th>Description</th>
            <th>Type</th>
            <th>OS</th>
            <th>Ram_Max</th>
            <th>AUTH</th>
            <th>Etat de connection</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach ($Machines as $k => $v): ?>
            <tr>
            <td><?= $v['Machine']['id']; ?> </td>
            <td><?= $v['Machine']['nom']; ?></td>
            <td><?= $v['Machine']['description']; ?></td>
            <td><?= $v['Machine']['type']; ?></td>
            <td><?= $v['Machine']['os']; ?></td>
            <td><?= $v['Machine']['ram_max']; ?></td>
            <td><?= $v['Machine']['ssh_ip']; ?></td>
            <?php if ($connecte = true){


            echo '<td><i class="fa fa-check-square">OK</td>';

         }else{
        echo '<td><i class="fa  fa-warning">error</td>
        
        
         
                </tr>';
        } ?>
        <?php endforeach ?>
       
        
    </tbody>
</table>
<?= $this->Html->link( '<i class="fa fa-plus-square"></i> Ajouter une Machines', array( 'action' => 'edit'), array('class' => 'btn btn-primary', 'escape' => false)); ?>

  </div>
</div>
Cordialement
TheSkinLine01

Eléphanteau du PHP | 18 Messages

14 sept. 2014, 06:08

bonjour,

J'ai fait plusieurs teste,
Il se connecte bien à la machine
Image

code php:
<?php

App::uses('AppController','Controller');
class MachinesController extends AppController{

  public function admin_index(){
		$this->layout='admin';
		$this->loadModel('Machine');
		$Machines = $this->Machine->find('all');
		$this->set(compact('Machines'));
		$connecte = $this->Machine->find('all');
		foreach ($Machines as $k => $v){

		
		

		$usenet = fsockopen($v['Machine']['ssh_ip'],$v['Machine']['ssh_ports'], $errno, $errstr,10);
			if(!$usenet) 
        { 
        echo "Connexion failed\n"; 
        exit(); 
        } 
else 
        { 
        echo "Connected\n<BR>"; 
        fputs ($usenet, "toto\r\n"); 
        fputs ($usenet, "en\r\n"); 
        fputs ($usenet, "tutu\r\n"); 
        fputs ($usenet, "exit\r\n"); 
        while (!feof($usenet)) 
                { 
                echo ". ".fgets($usenet, 128)."<BR>\n"; 
                } 
        } 

		




}
}

	public function admin_edit($id = null){
    $this->layout='admin';
	
		if(!empty($this->request->data)){
			$this->loadModel('Machine');
			$this->Machine->save($this->request->data);
			$this->Session->setFlash('Les information ont bien ete modifier!');
			return $this->redirect(array('action' => 'index'));

		}else if($id){
			$this->loadModel('Machine');
			$this->request->data = $this->Machine->findByid($id);


		}



		
	}


	public function admin_delete($id){
		$this->layout='admin';
		$this->loadModel('Machine');
		$this->Machine->delete($id);
		$this->Session->setFlash('La machine a bien ete suprimé');
		return $this->redirect(array('action' => 'index'));
		 }

}

?>
Perso je suis un peut perdu la ^^
Cordialement
TheSkinLine01

Eléphanteau du PHP | 18 Messages

15 sept. 2014, 01:43

Personne pour une petit idée ?

ViPHP
ViPHP | 1996 Messages

15 sept. 2014, 10:08

Je ne comprends pas trop ton cas :
Si tu utilises fsockopen tu as un message d'erreur (lequel ?) qui te dis que ta machine n'est pas connectée ou qu'elle n'existe pas ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 18 Messages

15 sept. 2014, 17:55

Bonjour,
Nan j'ai mis 2 machine une machine qui est connecter au ssh et une machine bidon mais dans les 2 cas il me dit que les 2 machines sont connecter alors quille devrait en avoir une avec le statu ' OK ' et laus avec le statut ' non connecter'
Mon problème c'est que dans tout les il me dit dit que les machines sont connecter

Cordialement
TheSkinLine01

ViPHP
xTG
ViPHP | 7331 Messages

15 sept. 2014, 19:29

Problème de template.
Tu utilises à priori une seule et même variable.
Il faut penser que dans un modèle MVC le contrôleur a déjà fini de s'exécuter quand la vue est générée.
Donc ta variable $connecte contient la valeur de la dernière itération de ta boucle dans le contrôleur.

Ah et une autre pour la route :
<?php if ($connecte = true){
Un simple égal en PHP c'est une affectation, pas une comparaison. ;)

Eléphanteau du PHP | 18 Messages

15 sept. 2014, 19:36

Bonsoir,
Merci pour tout mais justement je ne sais pas trop comment faire le system je débute dans le php juste une petit idées svp :)
Enfin surtout comment faire un systeme pour que chaque serveurs est sa variable ? car en effet j'utilise une seul et même variable sa ne peut pas fonctionner pour plusieurs machines XD
Cordialement
TheSkinLine01

ViPHP
xTG
ViPHP | 7331 Messages

16 sept. 2014, 20:09

Bah faut voir avec la documentation de ton framework... Je peux pas l'inventer. :D
Le plus simple serait de rajouter dans l'array $Machines un index pour indiquer l'état de connexion.

Eléphanteau du PHP | 18 Messages

17 sept. 2014, 12:17

Bonjour,
Je te remercie :)
Je vais voir sa
Cordialement
TheSkinLine01