2017-04-04 4 views
0

J'ai un problème avec PHP et l'extension SSH/Net-SSH-Libary. Je l'utilise pour envoyer des commandes à un NetApp-Filer. Donc, je veux créer/supprimer des volumes sur le filer. Création pour les volumes n'est pas un problème.PHP/SSH: Commande multiple dans la même session (faire une confirmation)

Mais quand je veux les supprimer, le déposant demande une confirmation ("Etes-vous sûr de vouloir supprimer .. y/n") et je ne peux pas donner cette information à NetApp. Pour chaque exec-Command, commence une nouvelle session.

Est-il possible d'exécuter plus de commandes dans la même session ou de leur donner une confirmation de certaines commandes?

Mon code (seulement Volume supprimer):

<?php 
include('Net/SSH2.php'); 
      $ssh = new Net_SSH2('172.22.31.53'); 
      if (!$ssh->login('admin', '12Test')) { 
       exit('Login Failed'); 
      } 

      echo $ssh->exec("vol unmount $row->name"); 
      sleep(1); 
      echo $ssh->exec("vol offline $row->name"); 
      sleep(1); 
      echo $ssh->exec("vol delete $vol_name \n y"); 
      $loesch = mysqli_query($db, "DELETE FROM volumes WHERE id = '$id'"); 
      header('Location: splash.html'); 

?> 

Merci de l'avance!

Salutations

Répondre

1

Je vois quelques solutions possibles:

  1. utilisation \n:

    $ssh->exec("cd mydir\n./script"); 
    

    Ou créer un script avec vos commandes, par exemple script.sh et l'enregistrer dans Format UNIX:

    cd mydir 
    ./script 
    

    Puis exec le script:

    $script = file_get_contents("script.sh"); 
    $ssh->exec($script); 
    
  2. Utilisez un ; ou un && pour séparer les commandes.

    ssh2_exec($connection, 'command1 ; command2'); //run both uncondtionally) 
    ssh2_exec($connection, 'command1 && command2'); //run command2 only if command1 succeeds 
    
  3. Utilisez stream_set_blocking() comme ceci:

    $cmds = [ 'ls', 'ps ux' ]; 
    $connection = ssh2_connect('127.0.0.1', 22); 
    ssh2_auth_password($connection, 'username', 'password'); 
    $output = []; 
    foreach ($cmds as $cmd) { 
        $stream = ssh2_exec($connection, $cmd); 
        stream_set_blocking($stream, true); 
        $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO); 
        $output[] = stream_get_contents($stream_out); 
    } 
    

    Vous trouverez toutes les sorties dans le tableau $output.

Reference

+0

Je ne pense pas que vous avez testé votre réponse. –

+0

@MarcinOrlowski pourquoi la downvote? Cela a été testé. Veuillez vérifier la référence aussi. –

+0

Je n'ai pas aimé la réponse de la façon dont elle était autrefois affichée. Maintenant, c'est mieux, alors j'ai rétracté mon downvote. –