web-dev-qa-db-fra.com

Exécuter un script shell avec un bouton html

Je souhaite lancer un script bash lorsqu'un bouton est enfoncé 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. 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.sh dans Shell, le script peut être exécuté. Cependant, lorsque je pointe mon navigateur Web vers http://example.com/screen.php (qui contient le code ci-dessus), je vois un page blanche et le script n'a pas exécuté. Les deux ont des autorisations d'exécution. Pourquoi ça ne marche pas?

11
dukevin

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 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. onClick sera seulement capable de lancer JavaScript (ou d'autres langages de script ), mais pas n'importe quel script Shell arbitraire résidant sur votre ordinateur. Les scripts HTML ne s'exécutent que dans le navigateur et ne peuvent effectuer que des tâches limitées. Plus important encore, ils ne peuvent pas interagir avec votre ordinateur.

Pensez-y: comment le navigateur saurait-il ouvrir le fichier? Ne pensez-vous pas qu'il s'agirait également d'un problème de sécurité - un site Web ordinaire 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 d'exécuter un 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 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 souhaitez exécuter un script côté serveur et que l'utilisateur en déclenche l'exécution, vous devez utiliser un langage de programmation côté serveur. Juste le HTML ne le fera pas, parce que c'est plus ou moins un fichier statique. Si vous souhaitez interagir avec le serveur, vous pouvez par exemple utiliser PHP .

La fonction exec permet d’exécuter un script de ligne de commande stocké sur le serveur Web. Donc, fondamentalement, vous pourriez écrire exec('/path/to/name.sh'); et exécuter le script sur le serveur.

Cependant, mettre ceci dans onClick n'est pas suffisant ici. Si vous ne connaissez pas encore PHP et la programmation Web côté serveur, vous voudrez peut-être commencer par lire quelques tutoriels, puis revenir avec une question plus précise.


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

En cas de problème, recherchez la valeur de retour du script avec echo exec(...); pour voir s’il ya 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.

11
slhck

Vous avez besoin d’une certaine intelligence côté serveur pour cela. HTML seul ne suffit pas, car il est statique. Un moyen commun 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');
?>

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 pouvez sécuriser la page avec des htacces.

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

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

4) Il serait bon d’obtenir le résultat du script Shell (code retour et éventuellement sortie texte) et de l’écrire dans le navigateur. Cela a assez de problèmes pour une question séparée:)

4
mit

Ce pourrait être un problème de permission.

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

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

3
user635568

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

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

1
Torreh

Pour exécuter les 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 en tant que scripts CGI. N'oubliez pas de modifier les autorisations de fichiers .sh en 755.

0
Agnel Vishal