2013-08-22 4 views
1

J'essaie d'exécuter une commande shell simple et d'imprimer le résultat sur une page Web mais les résultats sont vides. Voici un morceau de code que j'ai trouvé mais rien n'a fonctionné jusqu'à présent.Exécuter une commande shell via ssh en utilisant PHP

<?php 
      $server = "myserver"; 
      $username = "myadmin"; 
      $command = "ps"; 
      $str = "ssh " .$username. "@" .$server. " " .$command; 

      exec($str, $output); 

      echo '<pre>'; 
      print_r($output); 
      echo '</pre>'; 
    ?> 
+0

La commande ssh fonctionne-t-elle d'elle-même, c'est-à-dire que vous avez d'abord essayé la ligne de commande? – bjackfly

+0

'exec ($ str, $ sortie, $ return); Vérifiez aussi le code d'erreur 'var_dump (array ($ output, $ return));' – Jigar

+0

aussi 'echo $ str;' récupérez la chaîne et essayez de l'exécuter manuellement dans shell. – Jigar

Répondre

4

Essayez phpseclib, cela fonctionnera.

<?php 
    include('Net/SSH2.php'); 

    $server = "myserver"; 
    $username = "myadmin"; 
    $password = "mypass"; 
    $command = "ps"; 

    $ssh = new Net_SSH2($server); 
    if (!$ssh->login($username, $password)) { 
     exit('Login Failed'); 
    } 

    echo $ssh->exec($command); 
?> 
+0

Je ne peux pas installer de paquet sur ces machines. Y a-t-il un autre moyen de contourner cela? – tomtomssi

+1

Eh bien, si vous pouvez créer des fichiers sources PHP sur vos machines, vous pouvez installer phpseclib, parce que c'est juste un tas de fichiers PHP. – ciruvan

+0

Est-il possible de se connecter avec des clés SSH au lieu d'utiliser un mot de passe codé en dur? – tomtomssi

0

En utilisant une solution plus orientée objet, vous pouvez installer phpseclib version 2 avec:

composer require phpseclib/phpseclib 

Et puis il suffit de créer votre objet ssh:

$ssh = new SSH2('yourhost'); 
if (!$ssh->login('username', 'password')) { 
    exit('Login Failed'); 
} 

Dans cet exemple, j'ai utilisé une connexion via nom d'utilisateur et mot de passe mais vous pouvez également vous connecter via les touches ssh. Si la connexion aboutit, vous pouvez exécuter la méthode exec pour exécuter votre commande sur le serveur.

Questions connexes