Exécuter un script shell avec un bouton html

12

Je veux lancer un script bash lorsqu'un bouton est enfoncé sur un site Web. Ceci est ma première tentative:

<button type="button" onclick="/path/to/name.sh">Click Me!</button>

Mais pas de chance. Aucune suggestion?

EDIT- En suivant les conseils de slhclk et mit:

J'ai un fichier php dans / var / www vers lequel je pointe mon navigateur Web. Le contenu du fichier est le suivant:

<?php
exec("/home/aa/scripts/test.sh");
?>

tesh.sh contient ceci:

screen -S server1 -X quit

Si je tape /home/aa/scripts/test.shdans shell, le script est capable de s'exécuter. Cependant, lorsque je pointe mon navigateur Web vers http://example.com/screen.php (qui a le code ci-dessus), je vois une page vierge et le script n'a pas été exécuté. Les deux ont des autorisations d'exécution. Pourquoi ça ne marche pas?

dukevin
la source
Il serait intéressant de savoir de quel type de serveur Web il s'agit. Par exemple, cela pourrait être un serveur Linux domestique, une machine Windows avec XAMPP ou une offre d'hébergement de masse de site Web standard avec un nom de domaine d'un grand hébergeur?
mit
Je suis sur Debian Lenny qui coule sur un VPS que je loue
Dukevin
1
C'est vraiment un Dup de cela, même demandé par le même utilisateur ">> stackoverflow.com/questions/6235785/… , où j'ai posté ma réponse de travail. Je pensais qu'ils devraient être liés.
FreeSoftwareServers

Réponses:

11

Ce que vous essayez de faire n'est pas possible de cette façon.

Notez qu'il y a toujours deux côtés: le côté client et le côté serveur. Le script est-il sur l'ordinateur client ou sur le serveur?


Si c'est sur le client: En tant que visiteur, vous ne voyez qu'un site Web HTML. onClickne pourra lancer que JavaScript (ou d' autres langages de script ), mais pas un script shell arbitraire résidant sur votre ordinateur. Les scripts HTML ne s'exécutent que dans le navigateur et ne peuvent faire que des choses limitées. Plus important encore, ils ne peuvent pas interagir avec votre ordinateur.

Pensez-y: comment le navigateur pourrait-il savoir comment ouvrir le fichier? Ne pensez-vous pas que ce serait aussi un problème de sécurité - un simple site Web déclenchant l'exécution de scripts sur l'ordinateur d'un client? Et s'il y avait quelque chose comme ça onClick('rm -rf /home/user')?

Une alternative serait d'exécuter une applet Java, si vous voulez que le code soit exécuté sur le client, mais ce n'est pas exactement la même chose et c'est quelque chose de vraiment compliqué. Je ne pense pas qu'il soit nécessaire d'expliquer cela en détail.


Si le script se trouve sur le serveur: si vous souhaitez exécuter un script côté serveur et demander à l'utilisateur de déclencher son exécution, vous devez utiliser un langage de programmation côté serveur. Seul HTML ne le fera pas, car il s'agit plus ou moins d'un fichier statique. Si vous souhaitez interagir avec le serveur, vous pouvez par exemple utiliser PHP .

Il a pour execfonction d'exécuter un script de ligne de commande qui est stocké sur le serveur Web. Donc, fondamentalement, vous pouvez écrire exec('/path/to/name.sh');et exécuter le script sur le serveur.

Cependant, il onClickne suffit pas de mettre cela en place ici. Si vous ne connaissez pas encore PHP et la programmation Web côté serveur, vous voudrez peut-être d'abord lire quelques tutoriels, puis revenir avec une question plus spécifique.


Si vous avez un fichier php avec la exec(...)commande appropriée , assurez-vous que le script a des autorisations d'exécution définies non seulement pour l'utilisateur mais aussi pour le groupe dans lequel se trouve le serveur Web, donc dans le cas le plus simple 777.

En cas de problème, vérifiez la valeur de retour du script avec echo exec(...);pour voir s'il y a des erreurs.

Vous pouvez également exécuter le script à partir de la ligne de commande et non à partir du navigateur avec php /path/to/file.php.

slhck
la source
Merci beaucoup pour la réponse complète. Le script shell réside sur mon ordinateur. J'essaie ce que vous avez écrit, mais je rencontre un problème. J'ai édité ma question ci
dukevin
D'accord, c'est alors un problème différent. Avez-vous réellement installé PHP? Essayez d'obtenir le code retour de la execligne en écrivant echo exec(...);. Notez également que le script nécessite des autorisations d'exécution pour le groupe sur lequel votre serveur Web s'exécute, pas seulement pour votre utilisateur.
slhck
oui j'ai chmod 777 sur les deux fichiers. Et j'ai essayé d'exécuter le php directement à partir du shell avec des résultats étranges. pastebin.com/eU0xTkp2 Cependant, j'ai installé php, confirmé avec php -vet le fait que j'ai phpfilemanager pour que les gens éditent des fichiers. Pourquoi n'utilise-t-il pas l'interpréteur php?
dukevin
Vous devez l'exécuter avec php /var/www/trash/run.phpet pas seulement le nom du fichier PHP lui-même.
slhck
1
Pas une chose! Je ne suis pas trop sûr des détails, mais cela devrait être parce que lorsque vous l'exécutez à partir de la ligne de commande, vous l'exécutez en tant qu'utilisateur correct, tandis que lorsqu'il est exécuté à partir du navigateur, l'utilisateur est manquant. Vous auriez besoin de vérifier cela dans votre script shell, je suppose.
slhck
4

Vous avez besoin d'un peu d'intelligence côté serveur pour cela. Le HTML seul ne suffit pas, car il est statique. Un moyen courant serait php. De nombreuses offres hébergées ont php installé par défaut.

Vous pouvez utiliser un programme ftp pour placer un fichier texte dans le répertoire racine de votre serveur.

Le fichier texte pourrait être nommé "run.php" avec le contenu suivant:

<h3>Executing /path/to/name.sh</h3>
<?
exec('/path/to/name.sh');
?>

Supposons que votre domaine soit "example.com", si vous visitez cette page dans votre navigateur:

http://example.com/run.php

alors le fichier php sera exécuté sur le serveur. Il enverra une page HTML au navigateur avec l'en-tête. Et le script sera exécuté sur le serveur.

Il y a certaines choses à garder à l'esprit et quelques améliorations possibles:

1) tout le monde pourra accéder à cette page, même les robots. Vous pouvez sécuriser la page avec htacces.

2) Cette page se déclenchera en cas de demande "GET" normale du navigateur. Mais cela implique une action sur le serveur, et si cette action modifie des données ou fait quelque chose d'important, il serait préférable de ne déclencher le script que sur une requête POST.

3) Vous pouvez insérer une instruction formulaire / bouton pour pouvoir recharger / exécuter à nouveau la page. Assurez-vous d'utiliser la bonne méthode (GET ou POST) dans l'attribut method de l'instruction de formulaire HTML.

4) Il serait bon d'obtenir le résultat du script shell (code rturn et peut-être une sortie texte) et de l'écrire dans le navigateur. Cela a suffisamment de problèmes pour une qustion distincte:)

mit
la source
3

Ce pourrait être un problème d'autorisation.

Lorsque vous l'avez déclenché à l'aide de webapp , c'est apache qui exécute le script. Si apache n'a pas l'autorisation d'exécuter le script, cela ne fonctionnera pas.

Solution: vérifiez l'autorisation et réessayez .. :)

user635568
la source
1

Je sais que c'est bien tard mais je pense qu'il vaut la peine de noter que la configuration de CGI sur un serveur vous permettra d'exécuter un script bash côté serveur sans utiliser PHP ou quoi que ce soit du genre.

Je sais que cela ne répond pas à la question mise à jour, mais je l'ai trouvé en essayant de comprendre les choses moi-même, alors j'ai pensé que je le publierais!

Torreh
la source
0

Pour exécuter des scripts shell directement à partir du navigateur, vous devez ajouter cette règle à votre fichier .htaccess:

Options +ExecCGI
AddHandler cgi-script .sh

Cela indique au serveur Web de traiter les fichiers .sh comme des scripts CGI. N'oubliez pas de changer les autorisations du fichier .sh en 755.

Agnel Vishal
la source