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

Ausführen eines Shell-Skripts mit einer html-Schaltfläche

Ich möchte ein Bash-Skript starten, wenn eine Schaltfläche auf einer Website gedrückt wird. Dies ist mein erster Versuch:

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

Aber kein Glück. Irgendwelche Vorschläge?

EDIT- Den Ratschlägen von slhclk und mit folgend:

Ich habe eine php-Datei in /var/www, auf die ich meinen Web-Browser verweise. Der Inhalt der Datei ist wie folgt:

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

tesh.sh enthält dies:

screen -S server1 -X quit

Wenn ich in der Shell /home/aa/scripts/test.sh eingebe, kann das Skript ausgeführt werden. Wenn ich jedoch meinen Web-Browser auf http://example.com/screen.php (das den obigen Code enthält) zeige, sehe ich eine leere Seite und das Skript wurde nicht ausgeführt. Beide haben Ausführungsrechte. Warum funktioniert es nicht?

Antworten (5)

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

Was Sie versuchen, ist auf diese Weise nicht möglich.

Beachten Sie, dass es dabei immer zwei Seiten gibt: Die Client-Seite und die Server-Seite. Befindet sich das Skript auf dem Client-Rechner oder auf dem Server?


Wenn es auf dem Client liegt: Sie als Besucher sehen nur eine HTML-Website. onClickkann nur JavaScript (oder andere Skriptsprachen ) starten, aber kein beliebiges Shell-Skript, das sich auf Ihrem Computer befindet. HTML-Skripte werden nur im Browser ausgeführt und können nur begrenzte Dinge tun. Am wichtigsten ist, dass sie nicht mit Ihrem Computer interagieren können.

Denken Sie darüber nach: Woher soll der Browser wissen, wie er die Datei öffnen soll? Glauben Sie nicht, dass dies auch ein Sicherheitsproblem wäre - eine einfache Website, die die Ausführung von Skripten auf dem Computer eines Kunden auslöst? Was wäre, wenn es so etwas gäbe wie onClick('rm -rf /home/user')?

Eine Alternative wäre, ein Java-Applet auszuführen, wenn man möchte, dass Code auf dem Client ausgeführt wird, aber das ist nicht genau dasselbe und es ist etwas sehr Kompliziertes. Ich denke nicht, dass es notwendig ist, dies im Detail zu erklären.


Wenn das Skript auf dem Server liegt: Wenn Sie ein Skript auf der Serverseite laufen lassen wollen und der Benutzer dessen Ausführung auslösen soll, dann müssen Sie eine serverseitige Programmiersprache verwenden. Einfaches HTML wird es nicht tun, weil es mehr oder weniger eine statische Datei ist. Wenn Sie mit dem Server interagieren wollen, könnten Sie zum Beispiel PHP verwenden.

Es hat die Funktion exec , um ein Kommandozeilenskript auszuführen, das auf dem Webserver gespeichert ist. Im Grunde könnten Sie also exec('/path/to/name.sh'); schreiben und es würde das Skript auf dem Server ausführen.

Allerdings reicht es hier nicht aus, dies einfach in onClick zu schreiben. Wenn Sie sich noch nicht mit PHP und serverseitiger Webprogrammierung auskennen, sollten Sie vielleicht zuerst ein paar Tutorials lesen und dann mit einer spezifischeren Frage zurückkommen.


Wenn Sie eine php-Datei mit dem entsprechenden exec(...)-Befehl haben, stellen Sie sicher, dass das Skript Ausführungsrechte nicht nur für den Benutzer, sondern auch für die Gruppe, in der sich der Webserver befindet, gesetzt hat, also im einfachsten Fall nur 777.

Im Problemfall überprüfen Sie den Rückgabewert des Skripts mit echo exec(...);, um zu sehen, ob es irgendwelche Fehler gibt.

Sie können das Skript auch von der Kommandozeile und nicht vom Browser aus mit php /path/to/file.php ausführen.

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

Sie benötigen dafür eine serverseitige Intelligenz. HTML allein ist nicht genug, da es statisch ist. Ein gängiger Weg wäre php. Viele gehostete Angebote haben php standardmäßig installiert.

Sie können ein ftp-Programm verwenden, um eine Textdatei in das Hauptverzeichnis Ihres Servers zu legen.

Die Textdatei könnte “run.php” heißen und folgenden Inhalt haben:

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

Nehmen wir an, Ihre Domain ist “example.com”, wenn Sie diese Seite in Ihrem Browser aufrufen: http://example.com/run.php

dann wird die php-Datei auf dem Server ausgeführt. Es wird eine HTML-Seite mit der Überschrift an den Browser gesendet. Und das Skript wird auf dem Server ausgeführt.

Es gibt einige Dinge zu beachten und einige mögliche Verbesserungen:

1) Jeder kann diese Seite aufrufen, auch Robots. Sie könnten die Seite mit htacces absichern.

2) Diese Seite wird bei einer normalen “GET”-Anfrage des Browsers ausgelöst. Aber sie involviert eine Aktion auf dem Server, und wenn diese Aktion Daten ändert oder etwas Wichtiges tut, wäre es besser, das Skript nur bei einer POST-Anfrage auszulösen.

3) Sie können eine Formular-/Schaltflächenanweisung einfügen, um die Seite neu laden/ausführen zu können. Achten Sie darauf, dass Sie die richtige Methode (GET oder POST) im method-Attribut der HTML-Form-Anweisung verwenden.

4) Es wäre gut, das Ergebnis des Shell-Skripts (rturn-Code und vielleicht Textausgabe) zu erhalten und es in den Browser zu schreiben. Dies hat genug Probleme für eine separate Frage : )

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

Es könnte sich um ein Berechtigungsproblem handeln.

Wenn Sie es mit webapp ausgelöst haben, ist es apache, der das Skript ausführt. Wenn apache keine Berechtigung hat, das Skript auszuführen, wird es nicht funktionieren.

Lösung: Überprüfen Sie die Berechtigung und versuchen Sie es erneut :)

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

Ich weiß, dass dies sehr spät ist, aber ich denke, es ist erwähnenswert, dass die Konfiguration von CGI auf einem Server es Ihnen ermöglicht, ein serverseitiges Bash-Skript auszuführen, ohne PHP oder irgendetwas in der Art zu verwenden.

Ich weiß, dass dies nicht auf die aktualisierte Frage eingeht, aber ich habe dies gefunden, als ich versucht habe, die Dinge selbst herauszufinden, also dachte ich, ich würde es posten!

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

Um Shell-Skripte direkt vom Browser aus zu starten, sollten Sie diese Regel zu Ihrer .htaccess-Datei hinzufügen:

Options +ExecCGI
AddHandler cgi-script .sh

Damit wird der Webserver angewiesen, .sh-Dateien als CGI-Skripte zu behandeln. Vergessen Sie nicht, die Berechtigungen für .sh-Dateien auf 755 zu ändern.