ssh2_exec et mkdir ??

Eléphant du PHP | 419 Messages

23 août 2008, 22:58

Bonjour,
J'ai un dédié avec debian 4.0, php5, apache2 et la libssh2 et ssh2 installé dessus.
Je voudrais créer un dossier grace a un fichier php donc voici mon code :
<?php
$connection = ssh2_connect('mon_ip', 22);
if (ssh2_auth_password($connection, 'sab', 'sab')) 
{
echo "Connection etablie !";
$stream = ssh2_exec($connection, 'mkdir /home/sab/aze');
} 
else 
{
echo "Authentication Failed...";
}
?>
La connection est établie mais le dossier ne se crée pas.
C'est du a quoi ?
Merci !!

ViPHP
ViPHP | 5924 Messages

23 août 2008, 23:16

Tu as essayé d'exécuter la commande en te connectant directement ?
Que te renvoie la fonction ssh2_exec() ?
Si elle ne te renvoie pas FALSE, elle est censé te renvoyer une ressource, tu as essayé de récupérer les flux STDERR et STDOUT avec la fonction ssh2_ fetch_ stream() et de lire ces flux avec fread() ?

Que de questions sans réponse… :)

Eléphant du PHP | 419 Messages

24 août 2008, 00:22

Tu as essayé d'exécuter la commande en te connectant directement ?
Que te renvoie la fonction ssh2_exec() ?
Si elle ne te renvoie pas FALSE, elle est censé te renvoyer une ressource, tu as essayé de récupérer les flux STDERR et STDOUT avec la fonction ssh2_ fetch_ stream() et de lire ces flux avec fread() ?

Que de questions sans réponse… :)
Bien sur, en me connectant directement, ça crée bien le dossier aze.
Je verrais demain ce que me renvoie la fonction.
Je n'ai pas essayé de récupérer le flux STDERR ni STDOUT car je ne sais pas ce que c'est ( ça sera bientot fait ^^ ).

Je ferais tout ça demain et je te dirais.

ViPHP
ViPHP | 5924 Messages

24 août 2008, 01:06

Je ferais tout ça demain et je te dirais.
Très bien, bonne nuit :)

Eléphant du PHP | 419 Messages

24 août 2008, 19:36

<?php
$connection = ssh2_connect('mon_ip', 22);
if (ssh2_auth_password($connection, 'sab', 'sab')) 
{
echo "Connection etablie !<br><br>"; 

	if (ssh2_exec($connection, 'mkdir /home/sab/aze'))
	{
	echo "ssh2_exec oki !<br>";
	}
	else
	{
	echo "ssh2_exec echec<br>"; 
	}

} 
else 
{
echo "Authentication Failed...<br>";
}


?>
M'affiche :

Code : Tout sélectionner

Connection etablie ! ssh2_exec oki !
Donc ça fonctionne mais toujours pas de dossier en vu ...
Je ne sais pas comment récuprer les fluxs STDERR et STDOUT... :s
J'ai recherché sur google mais je trouve pas ou alors j'y comprends rien.

ViPHP
ViPHP | 5924 Messages

24 août 2008, 19:52

Bon, c'est bon signe, tu peux récupérer la sortie au moins.
Tu aurais dû lire la documentation. Fais la même chose que dans l'exemple (en travaillant avec ssh2_exec() plutôt que ssh2_shell()).
Et lis le flux que tu récupères avec un fread()…

Eléphant du PHP | 419 Messages

24 août 2008, 20:03

Oki , j'ai fais ceci :
	<?php
$connection = ssh2_connect('crocamis.fr', 22);
if (ssh2_auth_password($connection, 'sab', 'sab')) 
{
echo "Connection etablie !<br><br>"; 

	if (ssh2_exec($connection, 'mkdir /home/sab/aze'))
	{
	echo "ssh2_exec oki !<br>";
	
	$varcommandessh = ssh2_exec($connection, 'mkdir /home/sab/aze');
	
	$handle = ssh2_fetch_stream($varcommandessh, SSH2_STREAM_STDERR);

	if ($handle)
	{
	
	echo "ssh2_fetch_stream OK";
	$varfread = fread($handle, 8192);
	echo $varfread;
	
	}
	
	else
	{
	echo "pas de ssh2_fetch_stream";
	}
	
	
	}
	else
	{
	echo "ssh2_exec echec<br>"; 
	}

} 
else 
{
echo "Authentication Failed...<br>";
}


?>
ça me retourne :

Code : Tout sélectionner

Connection etablie ! ssh2_exec oki ! ssh2_fetch_stream
Modifié en dernier par the_grinch le 24 août 2008, 20:11, modifié 1 fois.

ViPHP
ViPHP | 5924 Messages

24 août 2008, 20:11

Comme je te disais tu dois lire le flux retourné avec fread. Et fais le aussi pour STDIO… Avec cela tu auras le retour de la commande…

Eléphant du PHP | 419 Messages

24 août 2008, 20:12

J'ai fais fread() mais il ne me retourne rien. ( code dans mon précédent post )

ViPHP
ViPHP | 5924 Messages

24 août 2008, 20:34

Ok, et la même chose avec STDIO ?

Eléphant du PHP | 419 Messages

24 août 2008, 21:39

En remplaçant :SSH2_STREAM_STDERR par SSH2_STREAM_STDIO
De même, rien a part :

Code : Tout sélectionner

Connection etablie ! ssh2_exec oki ! ssh2_fetch_stream OK
    
    $handle = ssh2_fetch_stream($varcommandessh, SSH2_STREAM_STDIO);

    if ($handle)
    {
    
    echo "ssh2_fetch_stream OK";
    $varfread = fread($handle, 8192);
    echo $varfread;

ViPHP
ViPHP | 5924 Messages

24 août 2008, 21:43

C'est spé…
Là je ne vois pas… Théoriquement il devrait y avoir un message d'erreur dans l'une des deux sorties… Peut être un problème de droits, de dossier parent inexistant, ou ce genre de choses, sinon, je ne vois pas…

Eléphant du PHP | 419 Messages

24 août 2008, 21:47

Ahhhhhh quel con je suis !!!!
Désolé de t'avoir fait perdre ton temps Sékiltoyai, mais au moins je saurais quoi faire la prochaine fois.
En fait c'est que j'ai suPHP aussi pour gérer les sites de mes membres, ( et leur accés FTP )
Et j'ai testé avec un membre qui n'avais pas d'accès shell ( /bin/false ) et je viens de m'en rendre compte.
ça fonctionne parfaitement maintenant, ( je lui ai donné /bin/bash )
Merci encore et encore désolé mais c'est bisarre qu'il n'a pas envoyé d'erreur.

ViPHP
ViPHP | 5924 Messages

24 août 2008, 21:50

Ca arrive :)
Apprends tout de même à lire la documentation, même lorsqu'elle n'est pas exhaustive, à lire entre les lignes…

Eléphant du PHP | 419 Messages

24 août 2008, 21:57

Oui, c'est ce que je vais faire =) et plus me renseigner sur ce que tu m'as dis ( si ce n'est pas a cause de mon oubli de shell )

Merci encore !