Version complète: sur le forum Webmaster Hub : Appel de script shell depuis une page PHP
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > Scripts et utilitaires
ptit_boy
Bonjour à tous,
je cherche à créer une page web PHP qui aille executer un script (shell par exemple) sur un serveur linux et qui m'affiche le résultat. Je suis un peu paumé au milieu des requêtes GET et autres et j'aimerais bien savoir comment on fait de façon simple .... blush.gif

Merci biggrin.gif
dièse
Bonjour,

Tu peux utiliser la fonction exec :

http://www.nexen.net/docs/php/annotee/function.exec.php
NorSeb
Bonjour,

Bienvenue sur le Hub smile.gif (Pas de présentation ?)

Regarde du coté des fonction exec() et system()

[edit]Dièse trop rapide tongue.gif[/edit]
ptit_boy
Merci mais je croyais qu'exec ne fonctionnait qu'en local ? Moi ce que je veux faire c'est faire tourner la page PHP sur une machine A et cette page execute un script shell présente sur un serveur B. C'est donc pour ça que je me bat avec les requêtes GET.
dièse
Tout dépend de ce que tu veux faire. Si tu veux vraiment exécuter un script shell c'est un peu compliqué parce que la connexion sur le serveur distant nécessite une authentification. Par contre si tu peux faire en sorte que tes scripts soient écrits en PHP (et ce qui possible en shell est normalement possible en PHP wink.gif ), alors là il n'y a plus aucun problème.
ptit_boy
Non ce que je veux faire n'est pas possible en PHP (mon script fait appel aux commandes HCI d'une pile Bluetooth) et de toute façon le serveur où est mon script shell n'a pas PHP.
L'authentification c'est pas trop un problème, j'ai les droits sur le serveur.

Merci,

Laurent
dièse
Personnellement, j'utilise un méthode d'authentification par clés publiques :

http://www.tuteurs.ens.fr/internet/loin/ssh.html#s1_2


Mais il doit y avoir plus simple, attends peut-être l'avis d'une autre personne blush.gif
Anonymus
Ce que tu veux faire est assez risqué. Laisser à une page distante l'accès à un script local peut avoir pour conséquences que n'importe qui pourra activer ce script.

En fonction du type de script que tu veux lancer sur la machine locale, tu peux utiliser une authentification par clé publique, pour créer un programme (en php ou autre ? ) sur la machine locale qui aura comme conséquences d'activer le script sur la machine locale. Il te suffit après d'appeler cette page, qui fera les vérifications nécessaires, et lancera le script.
ptit_boy
Pour le moment la sécurité c'est pas trop mon problème, je veux juste arriver à faire un truc qui fonctionne.

Est-ce que ça amrcherait un truc comme ça :

function getAuthentifiedPage($host,$service_uri,$username="",$password="",$method="GET")
{
$sock = fsockopen($host,80,$errno,$errstr);
if ($sock == FALSE) {
die("<br />Erreur de socket : <br />$errstr ($errno)<br />");
}

$body = "";

fputs($sock, "$method $service_uri HTTP/1.0\r\n");

if($username != "") {
fputs($sock, "Authorization: Basic ".base64_encode("$username:$password")."\r\n");
}
fputs($sock, "Host: $host\r\n");
fputs($sock, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($sock, "Accept: */*\r\n");
fputs($sock, "\r\n");

$headers = "";
while ($str = trim(fgets($sock, 4096))) {
$headers .= $str;
$headers .= -"\n";
}

while (!feof($sock)) {
$body .= fgets($sock, 4096);
}
fclose($sock);
return $body;
}

et un appel avec :

$host = "X.X.X.X";
$service_uri = "mon_script.sh";
$username = "xxx";
$password = "xxx";

$response_data = getAuthentifiedPage($host,$service_uri,$username,$password,$params,"GET");

Hein ?
Ca activerait mon script ?

Ou sinon oui je fais juste un appel à une page web sur mon serveur, qui appelle en local le script ....
On peut appeler des scripts locaux avec quoi comme langage ? Javascript c'est possible ?
ozmonitor
Effectivement, c'est très risqué.
Mais si vous insistez, la solution est la suivante :

1/ création d'un jeu de clef privé/public (entre les deux serveurs)
2/ mise en place d'un script sur le serveur distant
3/ mettre ceci dans la page php
exec ou system (ssh toto_AT_serveur_distant /opt/script.sh);

Bon courage.
ptit_boy
Ca va vous faire rire mais y a pas de pile SSH sur le serveur en question .... IMSTP6.gif
ozmonitor
Il vaut mieux installer ssh, car faire cela en telnet/rexec est encore plus risqué !!!
ptit_boy
Je suis bien d'accord mais je choisis pas ce qu'il y a sur le serveur, c'est à prendre ou à laisser dans mon cas ... :nono:
Dan
CITATION(ptit_boy @ jeudi 12 janvier 2006, 14h27)
Je suis bien d'accord mais je choisis pas ce qu'il y a sur le serveur, c'est à prendre ou à laisser dans mon cas ...  :nono:
*
CITATION(ptit_boy @ jeudi 12 janvier 2006, 11h27)
L'authentification c'est pas trop un problème, j'ai les droits sur le serveur.
*

Ou tu as les droits, ou tu ne les as pas smile.gif
Avec les droits tu pourrais installer ssh, de manière à avoir un minimum de sécurité.

Dan
ptit_boy
J'ai tous les droits sur ce qu'il y a sur mon serveur de test, je peux toujours installer des trucs, mais ça m'avance pas parce que sur le serveur qui sera mis chez le client (c'est pour un boulot) je ne choisis pas ce qu'il y a. Et y a pas de SSH.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.