Esegui uno script di shell con un pulsante html


12

Voglio lanciare uno script bash quando viene premuto un pulsante su un sito Web. Questo è il mio primo tentativo:

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

Ma niente fortuna. Eventuali suggerimenti?

EDIT- Seguendo il consiglio del mit slhclk e di:

Ho un file php in / var / www a cui punta il mio browser web. Il contenuto del file è il seguente:

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

tesh.sh contiene questo:

screen -S server1 -X quit

Se scrivo /home/aa/scripts/test.shin shell, lo script è in grado di eseguire. Tuttavia, quando indico il mio browser web su http://example.com/screen.php (che ha il codice sopra), vedo una pagina vuota e lo script non è stato eseguito. Entrambi hanno i permessi di esecuzione. Perché non funziona?


Sarebbe interessante sapere che tipo di web server è. Ad esempio, potrebbe essere un server Linux di casa, un computer Windows con XAMPP o un'offerta di hosting di massa di siti Web standard con un nome di dominio da un grande hoster?
mit

Sono su Debian Lenny che scappa da un vps che affitto
Dukevin il

1
Questo è davvero un Dup di questo, anche chiesto dallo stesso utente ">> stackoverflow.com/questions/6235785/… , dove ho pubblicato la mia risposta di lavoro. Ho sentito che avrebbero dovuto essere collegati.
FreeSoftwareServers

Risposte:


11

Quello che stai cercando di fare non è possibile in questo modo.

Nota che ci sono sempre due lati: il lato client e il lato server. Lo script è sul computer client o sul server?


Se è sul client: tu come visitatore vedi solo un sito Web HTML. onClicksarà solo in grado di avviare JavaScript (o altri linguaggi di scripting ), ma non qualsiasi script shell arbitrario che risiede sul tuo computer. Gli script HTML vengono eseguiti solo nel browser e possono fare solo cose limitate. Soprattutto, non possono interagire con il tuo computer.

Pensaci: come potrebbe il browser sapere come aprire il file? Non pensi che questo sarebbe anche un problema di sicurezza: un semplice sito Web che avvia l'esecuzione di script sul computer di un client? E se ci fosse qualcosa del genere onClick('rm -rf /home/user')?

Un'alternativa sarebbe quella di eseguire un'applet Java, se si desidera eseguire il codice sul client, ma questo non è esattamente lo stesso ed è qualcosa di veramente complicato. Non credo sia necessario spiegarlo in dettaglio.


Se lo script si trova sul server: se si desidera eseguire uno script sul lato server e fare in modo che l'utente ne esegua l'esecuzione, è necessario utilizzare un linguaggio di programmazione lato server. Solo HTML non lo farà, perché è più o meno un file statico. Se vuoi interagire con il server, puoi ad esempio usare PHP .

Ha la execfunzione di eseguire uno script da riga di comando archiviato sul server Web. Quindi, fondamentalmente, potresti scrivere exec('/path/to/name.sh');ed eseguire lo script sul server.

Tuttavia, solo mettere questo in onClicknon è abbastanza qui. Se non conosci ancora PHP e la programmazione web lato server, potresti voler leggere prima alcuni tutorial e poi tornare con una domanda più specifica.


Se hai un file php con il exec(...)comando appropriato , assicurati che lo script abbia le autorizzazioni di esecuzione impostate non solo per l'utente ma anche per il gruppo in cui si trova il server web, quindi nel caso più semplice 777.

In caso di problemi, controlla il valore restituito dallo script echo exec(...);per vedere se ci sono errori.

Puoi anche eseguire lo script dalla riga di comando e non dal browser con php /path/to/file.php.


Grazie mille per la risposta approfondita. Lo script della shell risiede sul mio computer. Sto provando quello che hai scritto, tuttavia, sto riscontrando un problema. Ho modificato la mia domanda sopra
dukevin il

Va bene, allora questo è un problema diverso. Hai effettivamente installato PHP? Prova a ottenere il codice di ritorno della execriga scrivendo echo exec(...);. Si noti inoltre che lo script deve eseguire le autorizzazioni per il gruppo su cui è in esecuzione il server Web, non solo per l'utente.
slhck,

sì, ho chmod 777 su entrambi i file. E ho provato a eseguire il php direttamente dalla shell con risultati strani. pastebin.com/eU0xTkp2 Tuttavia, ho installato php, confermato php -ve il fatto che ho phpfilemanager per le persone su cui modificare i file. Perché non sta usando l'interprete php?
Dukevin,

Devi eseguirlo con php /var/www/trash/run.phpe non solo il nome del file PHP stesso.
slhck,

1
Non una cosa! Non sono troppo sicuro dei dettagli, ma dovrebbe essere perché quando lo esegui dalla riga di comando, lo esegui come l'utente corretto, mentre quando viene eseguito dal browser, l'utente manca. Dovresti verificarlo nel tuo script di shell, immagino.
slhck,

4

Per questo è necessaria un'intelligenza lato server. Il solo HTML non è sufficiente, perché è statico. Un modo comune sarebbe php. Molte offerte ospitate hanno php installato per impostazione predefinita.

È possibile utilizzare un programma ftp per inserire un file di testo nella directory principale del server.

Il file di testo potrebbe essere chiamato "run.php" con il seguente contenuto:

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

Supponiamo che il tuo dominio sia "esempio.com", se visiti questa pagina nel tuo browser:

http://example.com/run.php

quindi il file php verrà eseguito sul server. Invierà una pagina HTML al browser con l'intestazione. E lo script verrà eseguito sul server.

Ci sono alcune cose da tenere a mente e alcuni possibili miglioramenti:

1) tutti saranno in grado di colpire questa pagina, anche i robot. È possibile proteggere la pagina con htacces.

2) Questa pagina si attiverà in caso di una normale richiesta "GET" dal browser. Ma invoca un'azione sul server e se questa azione modifica i dati o fa qualcosa di importante, sarebbe meglio eseguire lo script solo su una richiesta POST.

3) È possibile inserire un'istruzione form / button per poter ricaricare / eseguire nuovamente la pagina. Assicurati di utilizzare il metodo giusto (GET o POST) nell'attributo method dell'istruzione form HTML.

4) Sarebbe bene ottenere il risultato dello script della shell (codice di ritorno e forse output del testo) e scriverlo nel browser. Questo ha abbastanza problemi per una domanda separata:)


3

Potrebbe essere un problema di autorizzazione.

Quando l'hai attivato usando webapp , è lo script che esegue apache . Se apache non dispone dell'autorizzazione per eseguire lo script, non funzionerà.

Soluzione: controllare l'autorizzazione e riprovare .. :)


1

So che è molto tardi, ma penso che valga la pena notare che la configurazione di CGI su un server ti permetterà di eseguire uno script bash sul lato server senza usare PHP o qualcosa del genere.

So che questo non affronta la domanda aggiornata, ma l'ho trovato mentre cercavo di capire le cose da solo, quindi ho pensato di pubblicarlo!


0

Per eseguire script di shell direttamente dal browser, è necessario aggiungere questa regola al file .htaccess:

Options +ExecCGI
AddHandler cgi-script .sh

Questo dice al web server di trattare i file .sh come script CGI. Non dimenticare di modificare le autorizzazioni del file .sh su 755.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.