execution Script shell via ssh2

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : execution Script shell via ssh2

Re: execution Script shell via ssh2

par minipopov » 03 avr. 2011, 09:18

Bon je viens de réussir a faire exécuter php un script shell donc je donne la solution. Alors en faite en faisant quelques test j'ai vu qu'en étant dans le dossier ou il y avait le script et a l'aide de la commande ./up.sh ou /opt/server_cs/up.sh, il s'exécutait. Alors que si on se place ailleurs genre dans opt et que je marque /opt/server_cs/up.sh mon script ne marchait plus. Désole de pas avoir fais ce test la... Mais sa me paraissait tellement logique que si je faisais ./up.sh et que sa marchait sa voulait dire que le script était bon. Donc voila ce qui clochait et pourquoi ces heures de souffrances :) je post quand même le résultat si sa intéresse un jour quelqu'un.

Code : Tout sélectionner

<?php require_once('connexion.php'); session_start(); if (isset($_SESSION['authentification']) && isset($_SESSION['privilege']) == "user"){ } else { header("Location:index.php?erreur=intru"); // redirection en cas d'echec exit; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>Panel M's server</title> <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" /> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <p> Utilisateur <?php echo $_SESSION['login']; ?> </p> <?php $connection = ssh2_connect('localhost', 22); if ($connection !== false) { $pwd = ssh2_auth_password($connection, '*******', '*******'); if ($pwd !== false ) { if ($_SESSION['login'] == "serv1") { $stream = ssh2_exec($connection, "/bin/sh /opt/server_cs1/up.sh"); if ($stream !== false) { header('Location: http://88.190.19.180/panel.php'); } else { echo 'erreur lors de l\'exec ssh2 de serv1 ...'; } } } else { header("Location:index.php?erreur=intru"); } } else { echo 'erreur de mot de passe '; } } else { echo 'erreur connection ssh2'; } ?> </body> </html>
Et voila le script

Code : Tout sélectionner

#!/bin/sh cd /opt/server_cs/ /usr/bin/screen -AmdS serv1 -d -m taskset -c 1 ./hlds_run -game cstrike +ip ********** -port 27016 +maxplayers 16 -pingboost 2 +map de_dust2 +sys_ticrate 10000
Merci beaucoup en tout cas ;)

Re: execution Script shell via ssh2

par minipopov » 01 avr. 2011, 18:35

En lisant les options de la commande j'ai vu sa

Code : Tout sélectionner

term_type term_type doit correspondre à une des entrées du fichier /etc/termcap du système cible et vaut par défaut vanilla.
Et en regardant bein j'ai pas de dossier "termcap" ni texte "termcap". Est ce normal? est ce que sa ne viendrait pas de la mon problème d'exécution de shell?

Re: execution Script shell via ssh2

par minipopov » 01 avr. 2011, 15:09

Bonjour,

Hum alors sa donne "erreur lors de l'exec ssh2 ..."

Re: execution Script shell via ssh2

par moogli » 01 avr. 2011, 11:59

hum essai avec http://www.php.net/manual/fr/function.ssh2-shell.php voir si tu a un retour !


@+

Re: execution Script shell via ssh2

par moogli » 31 mars 2011, 15:29

ce n'est pas une erreur cela t'affiche le type (et parfois le contenu) de la variable.

J'ai fait 2 -3 test rapide et je rencontre le même soucis que toi, je peut juste te dire que ton script "semble" correct et qu'il trouve le fichier (sinon la partie avec l'erreur te l'indiquerais).

je ne vois tous simplement pas ce qui peut bloquer a ce niveau faudrait que je fouille un peu, mais peut être que quelqu'un sais déjà ou ça pêche ;)


@+

Re: execution Script shell via ssh2

par minipopov » 30 mars 2011, 08:31

Donc en remplaçant le code j'ai eu une nouvelle erreur, "resource(6) of type (stream) "

Re: execution Script shell via ssh2

par moogli » 30 mars 2011, 01:54

heu tu ne vois pas de différence O_o

tu regarde ce qu'il y a dans deux variables différentes, l'une contient un flux l'autre une chaine vide c'ets un grosse différence.
a tout hasard ajoute $errorStream = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);
<?php
$stream = ssh2_exec($connection, "nano /opt/test.txt", 'xterm');
                  if ($stream !== false)
                  {
 $errorStream = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);
                                $retourssh = stream_get_contents($stream);
                        var_dump($errorStream);
                        }
?>

@+

Re: execution Script shell via ssh2

par minipopov » 29 mars 2011, 18:20

Sa me remet string(0) avec var_dump($retourssh);, avec l'ancienne commande var_dump($stream); j'ai l'erreur resource(5) of type (stream) alors que ya pas de différence entre les deux code non?

Re: execution Script shell via ssh2

par moogli » 29 mars 2011, 18:12

heu t'a deux fois la récup du stream ....

if ($stream !== false)
{
stream_get_contents($stream); <= c'est de trop à virer car tu récupère déja le flux
$retourssh = stream_get_contents($stream);
var_dump($retourssh);

essai ainsi
<?php
if ($_SESSION['login'] == "serv1")
                {   
                        $stream = ssh2_exec($connection, "nano /opt/test.txt", 'xterm');
                  if ($stream !== false)
                  {
                                $retourssh = stream_get_contents($stream);
                        var_dump($retourssh);

                        }
?>

Re: execution Script shell via ssh2

par minipopov » 29 mars 2011, 18:06

Donc je commance avec les droit

Code : Tout sélectionner

ls -l -rwxrwxrwx 1 root root 176 2011-03-28 06:23 up.sh
Mais bon étant donne que j'essaye de connecte php avec mon compte root, je pense que il n'y a pas de soucis.
Et donc oui j'ai pu utilise mon script sans soucis en me log de mon windows avec putty

Code : Tout sélectionner

if ($_SESSION['login'] == "serv1") { $stream = ssh2_exec($connection, "nano /opt/test.txt", 'xterm'); if ($stream !== false) { stream_get_contents($stream); var_dump($stream); }
J'ai laisse sa comme sa par ce que sa parrait logique, et donc sa me laisse l'erreur "resource(5) of type (stream) "

Code : Tout sélectionner

if ($_SESSION['login'] == "serv1") { $stream = ssh2_exec($connection, "nano /opt/test.txt", 'xterm'); if ($stream !== false) { stream_get_contents($stream); $retourssh = stream_get_contents($stream); var_dump($retourssh); }
La j'ai une ligne "string(0) "" " qui apparait.

Re: execution Script shell via ssh2

par moogli » 29 mars 2011, 17:47

les droits, tu les vois avec ton client ftp ou avec une console ssh ;)

si tu obtient ""resource(5) of type (stream)" c'est cela se déroule correctement (du moins pour php sinon tu aurais false).
Ensuite il faut exploiter cette ressource (limite comme tu le ferais avec mysql). c'est ce que tu veut faire avec stream_get_contents par contre, comme l'indique la doc, il faut bien mettre quelque part le retour de cette fonction donc après ou a la place de mon // etc

$retourssh = stream_get_contents($stream);
var_dump($retourssh);

et tu devrais avoir ce que le shell te crash en retour ;)

a tu essayé ton script avec une console ssh (si installé depuis une console bash utilise directement ssh, sous windows dl putty et essai d'utiliser le script ;) ).

s'il s'agit d'un serveur dédié tu doit pouvoir régler le problème "facilement" (en fonction de ce que tu veut avec ton script ;))


@+

Re: execution Script shell via ssh2

par minipopov » 29 mars 2011, 17:38

Donc après un "var_dump($stream);" j'obtiens "resource(5) of type (stream)" et quand je tape sa sur google bein je vois rien. Ensuite je vois pas trop ou tu vois les droit qu'apache (enfin si c'est bien lui qui fais tourne php) a sur le fichier? ou definit on un utilisateur pour sa? J'ai regarde dans apache.conf et je vois pas grand chose la dedans en rapport avec sa. Apres en changeant le code j'ai essaye de faire un mkdir, et le dossier ne s'est pas crée.

Re: execution Script shell via ssh2

par moogli » 29 mars 2011, 17:05

y a un message d'erreur ?

que retourne ssh2_exec ? (un var_dump($stream); pourrait t'être utile.

est ce que l'utilisation qui "fait tourner" php à la droit d'utiliser ton script dans /opt/server_cs/ (vérifie les droits).

a tu essayé avec le même code d'utiliser un script dans le répertoire du site web ?


@+

Re: execution Script shell via ssh2

par minipopov » 29 mars 2011, 15:21

Mon script ne s'exécute pas plus avec ce code :/

Re: execution Script shell via ssh2

par moogli » 29 mars 2011, 13:27

dans ton dernier code
<?php    
$connection = ssh2_connect('************', 22);
ssh2_auth_password($connection, '******', '*********');
if($stream !== false)
            {            
            echo "connexion ok";
            }
            else
            {
            echo "connexion nok";            
            }
         if ($_SESSION['login'] == "serv1")
         {    
         $stream = ssh2_exec($connection, "/opt/server_cs/up.sh", 'xterm');
         stream_get_contents($stream);         
         }
         else
         {
            header("Location:index.php?erreur=intru");
         }
?>
tu test, au début, si $stream !== false mais à ce moment la $stream n'existe pas.

a cet endroit tu peut tester si $connection et le retourn de ssh2_auth_password ne sont pas false ce test sur stream ne peut être fait qu'après le ssh2_exec ;)

je ferais ainsi
<?php    
$connection = ssh2_connect('************', 22);
if ($connection !== false) {
	$pwd = ssh2_auth_password($connection, '******', '*********');
	if ($pwd !== false ) {
		if ($_SESSION['login'] == "serv1")
		{    
			$stream = ssh2_exec($connection, "/opt/server_cs/up.sh", 'xterm');
			if ($stream !== false) {
				stream_get_contents($stream);
				//etc
			}
			else {
				echo 'erreur lors de l\'exec ssh2 ...';
			}
		}
		else
		{
			// a éviter pour les tests histoire de debug facilement
			header("Location:index.php?erreur=intru");
		}
	}
	else {
		echo 'erreur de mot de passe ';
	}
}
else {
	echo 'erreur connection ssh2';
}
?>

@+