Führen Sie ein Shell-Skript mit einer HTML-Schaltfläche aus

12

Ich möchte ein Bash-Skript starten, wenn auf einer Website eine Schaltfläche 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- Befolgen Sie die Ratschläge von slhclk und mit:

Ich habe eine PHP-Datei in / var / www, auf die ich meinen Webbrowser zeige. Der Inhalt der Datei lautet wie folgt:

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

tesh.sh enthält Folgendes:

screen -S server1 -X quit

Wenn ich eine /home/aa/scripts/test.shShell eingebe, kann das Skript ausgeführt werden. Wenn ich jedoch meinen Webbrowser auf http://example.com/screen.php (mit dem obigen Code) zeige, wird eine leere Seite angezeigt und das Skript wurde nicht ausgeführt. Beide haben Ausführungsberechtigungen. Warum funktioniert es nicht?

Herzogvin
quelle
Es wäre interessant zu wissen, um welche Art von Webserver es sich handelt. Zum Beispiel könnte es ein Home-Linux-Server, ein Windows-Computer mit XAMPP oder ein Standard-Website-Massenhosting-Angebot mit einem Domain-Namen von einem großen Hoster sein?
Mit
Ich bin auf Debian Lenny, der von einem vps läuft, den ich miete
dukevin
1
Dies ist wirklich ein Dup davon, sogar von demselben Benutzer gefragt ">> stackoverflow.com/questions/6235785/… , wo ich meine Arbeitsantwort gepostet habe. Ich fand, sie sollten verknüpft sein.
FreeSoftwareServers

Antworten:

11

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

Beachten Sie, dass dies immer zwei Seiten hat: die Clientseite und die Serverseite. Befindet sich das Skript auf dem Client-Computer oder auf dem Server?


Wenn es auf dem Client ist: Sie als Besucher sehen nur eine HTML-Website. onClickkann nur JavaScript (oder andere Skriptsprachen ) starten , jedoch kein beliebiges Shell-Skript, das sich auf Ihrem Computer befindet. HTML-Skripte werden nur im Browser ausgeführt und können nur begrenzte Aufgaben ausführen. Vor allem können sie nicht mit Ihrem Computer interagieren.

Denken Sie darüber nach: Woher weiß der Browser, wie die Datei geöffnet wird? 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 onClick('rm -rf /home/user')?

Eine Alternative wäre, ein Java-Applet auszuführen, wenn Code auf dem Client ausgeführt werden soll, dies ist jedoch nicht genau dasselbe und es ist etwas wirklich Kompliziertes. Ich denke nicht, dass es notwendig ist, dies im Detail zu erklären.


Wenn sich das Skript auf dem Server befindet: Wenn Sie ein Skript auf der Serverseite ausführen möchten und der Benutzer seine Ausführung auslösen soll, müssen Sie eine serverseitige Programmiersprache verwenden. Nur HTML wird es nicht tun, weil es mehr oder weniger eine statische Datei ist. Wenn Sie mit dem Server interagieren möchten, können Sie beispielsweise PHP verwenden .

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

Es onClickreicht hier jedoch nicht aus , dies nur zu tun . Wenn Sie noch nichts über PHP und serverseitige Webprogrammierung wissen, sollten Sie zuerst einige Tutorials lesen und dann eine spezifischere Frage stellen.


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

Überprüfen Sie im Fehlerfall den Rückgabewert des Skripts mit, echo exec(...);um festzustellen, ob Fehler vorliegen .

Sie können das Skript auch über die Befehlszeile und nicht über den Browser mit ausführen php /path/to/file.php.

slhck
quelle
Vielen Dank für die gründliche Antwort. Das Shell-Skript befindet sich auf meinem Computer. Ich versuche, was Sie geschrieben haben, aber ich stoße auf ein Problem. Ich habe meine Frage oben bearbeitet
dukevin
Okay, das ist dann ein anderes Problem. Haben Sie tatsächlich PHP installiert? Versuchen Sie, den Rückkehrcode der execZeile durch Schreiben zu erhalten echo exec(...);. Beachten Sie auch, dass das Skript Ausführungsberechtigungen für die Gruppe benötigt, auf der Ihr Webserver ausgeführt wird, nicht nur für Ihren Benutzer.
Slhck
ja ich habe chmod 777 auf beiden dateien. Und ich habe versucht, das PHP direkt von der Shell mit seltsamen Ergebnissen auszuführen. pastebin.com/eU0xTkp2 Ich habe jedoch PHP installiert, bestätigt mit php -vund die Tatsache, dass ich einen PHPFIL-Manager habe, auf dem Leute Dateien bearbeiten können. Warum wird der PHP-Interpreter nicht verwendet?
Dukevin
Sie müssen es mit php /var/www/trash/run.phpund nicht nur mit dem PHP-Dateinamen selbst ausführen .
Slhck
1
Kein Ding! Ich bin mir bei den Einzelheiten nicht sicher, sollte es aber sein, weil Sie es als den richtigen Benutzer ausführen, wenn Sie es über die Befehlszeile ausführen, während der Benutzer beim Ausführen über den Browser fehlt. Sie müssten das in Ihrem Shell-Skript überprüfen, denke ich.
Slhck
4

Dazu benötigen Sie serverseitige Informationen. HTML allein reicht nicht aus, da es statisch ist. Ein üblicher Weg wäre PHP. Bei vielen gehosteten Angeboten ist PHP standardmäßig installiert.

Sie können ein FTP-Programm verwenden, um eine Textdatei im Stammverzeichnis Ihres Servers abzulegen.

Die Textdatei könnte "run.php" mit folgendem Inhalt heißen:

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

Angenommen, Ihre Domain ist "example.com", wenn Sie diese Seite in Ihrem Browser besuchen:

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 treffen, auch Roboter. Sie können die Seite mit htacces sichern.

2) Diese Seite wird bei einer normalen "GET" -Anforderung vom Browser ausgelöst. Es handelt sich jedoch um eine Aktion auf dem Server. Wenn diese Aktion Daten ändert oder etwas Wichtiges tut, ist es besser, das Skript nur bei einer POST-Anforderung auszulösen.

3) Sie können eine Formular- / Schaltflächenanweisung einfügen, um die Seite erneut laden / ausführen zu können. Stellen Sie sicher, dass Sie die richtige Methode (GET oder POST) im Methodenattribut der HTML-Formularanweisung verwenden.

4) Es wäre gut, das Ergebnis des Shell-Skripts (Rturn-Code und möglicherweise Textausgabe) abzurufen und in den Browser zu schreiben. Dies hat genug Probleme für eine separate Frage :)

mit
quelle
3

Es könnte ein Berechtigungsproblem sein.

Wenn Sie es mit der Webanwendung ausgelöst haben , wird das Skript von Apache ausgeführt . Wenn Apache keine Berechtigung zum Ausführen des Skripts hat, funktioniert es nicht.

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

user635568
quelle
1

Ich weiß, dass dies viel zu spät ist, aber ich denke, es ist erwähnenswert, dass Sie durch die Konfiguration von CGI auf einem Server ein serverseitiges Bash-Skript ausführen können, ohne PHP oder ähnliches zu verwenden.

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

Torreh
quelle
0

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

Options +ExecCGI
AddHandler cgi-script .sh

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

Agnel Vishal
quelle