2011-06-04 09:01:23 +0000 2011-06-04 09:01:23 +0000
12
12

Exécuter un script shell avec un bouton html

Je veux lancer un script de bash quand on appuie sur un bouton sur un site web. C'est ma première tentative :

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

Mais pas de chance. Des suggestions ?

EDIT- Suivant les conseils de slhclk et mit :

J'ai un fichier php dans /var/www que je fais pointer sur mon navigateur web. Le contenu de ce 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.sh en shell, le script est capable de s'exécuter. Cependant, lorsque je pointe mon navigateur web sur http://example.com/screen.php (qui contient le code ci-dessus), je vois une page blanche et le script ne s'est pas exécuté. Les deux ont des autorisations d'exécution. Pourquoi cela ne fonctionne-t-il pas ?

Réponses (5)

11
11
11
2011-06-04 09:37:02 +0000

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

Notez qu'il y a toujours deux côtés à cela : Le côté client et le côté serveur. Le script se trouve-t-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. onClick ne pourra lancer que du JavaScript (ou autres langages de script ), mais pas un quelconque script shell arbitraire qui réside sur votre ordinateur. Les scripts HTML ne s'exécutent que dans le navigateur et ne peuvent faire que des choses limitées. Surtout, ils ne peuvent pas interagir avec votre ordinateur.

Pensez-y : Comment le navigateur saurait-il 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 onClick('rm -rf /home/user') ?

Une alternative serait de lancer 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 est sur le serveur: Si vous voulez exécuter un script côté serveur et que l'utilisateur en déclenche l'exécution, alors vous devez utiliser un langage de programmation côté serveur. Le HTML ne suffit pas, car il s'agit d'un fichier plus ou moins statique. Si vous voulez interagir avec le serveur, vous pouvez par exemple utiliser PHP .

Il dispose de la fonction exec pour exécuter un script en ligne de commande qui est stocké sur le serveur web. Donc, en gros, vous pourriez écrire exec('/path/to/name.sh'); et il exécuterait le script sur le serveur.

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


Si vous avez un fichier php avec la commande exec(...) appropriée, assurez-vous que le script a les 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, juste 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 du navigateur avec php /path/to/file.php.

4
4
4
2011-06-04 09:50:25 +0000

Pour cela, il faut une intelligence côté serveur. Le HTML seul ne suffit pas, car il est statique. Un moyen courant serait le php. De nombreuses offres d'hébergement ont le php installé par défaut.

Vous pouvez utiliser un programme ftp pour mettre 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');
?>

Disons que votre domaine est “exemple.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, y compris les robots. Vous pourriez sécuriser la page avec des htacces.

2) Cette page se lancera en cas de requête “GET” normale du navigateur. Mais elle 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 lancer le script que sur une requête POST.

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

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

3
3
3
2012-01-06 06:21:27 +0000

Il pourrait s'agir d'une question de permission.

Lorsque vous le déclenchez en utilisant webapp, c'est apache qui exécute le script. Si apache n'a pas la permission d'exécuter le script, il ne fonctionnera pas.

Solution : vérifiez la permission et réessayez.. :)

1
1
1
2018-08-11 08:36:42 +0000

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

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

0
0
0
2018-11-09 17:43:32 +0000

Pour exécuter des scripts shell directement depuis le 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 permissions des fichiers .sh pour 755.