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

Eseguire uno script di shell con un pulsante html

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 nessuna fortuna. Qualche suggerimento?

EDIT- Seguendo i consigli di slhclk e mit:

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

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

tesh.sh contiene questo:

screen -S server1 -X quit

Se digito /home/aa/scripts/test.sh in shell, lo script riesce ad essere eseguito. Tuttavia, quando punto il mio web-browser a http://example.com/screen.php (che ha il codice sopra), vedo una pagina bianca e lo script non è stato eseguito. Entrambi hanno i permessi di esecuzione. Perché non funziona?

Risposte (5)

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

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

Notate 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 HTML. onClicksarà solo in grado di lanciare JavaScript (o altri linguaggi di scripting ), ma non qualsiasi script shell arbitrario che risiede sul tuo computer. Gli script HTML girano solo nel browser e possono fare solo cose limitate. La cosa più importante è che non possono interagire con il tuo computer.

Pensateci: Come farebbe il browser a sapere come aprire il file? Non pensate che anche questo sarebbe un problema di sicurezza - un semplice sito web che innesca l'esecuzione di script sul computer di un cliente? E se ci fosse qualcosa come onClick('rm -rf /home/user')?

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


Se lo script è sul server: Se volete eseguire uno script sul lato server e fare in modo che l'utente ne attivi l'esecuzione, allora dovete usare un linguaggio di programmazione lato server. Solo l'HTML non lo farà, perché è più o meno un file statico. Se vuoi interagire con il server, potresti per esempio usare PHP .

Ha la funzione exec per eseguire uno script da linea di comando che è memorizzato sul server web. Quindi, fondamentalmente, puoi scrivere exec('/path/to/name.sh'); e questo eseguirà lo script sul server.

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


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

In caso di problemi controllate il valore di ritorno dello script con echo exec(...); per vedere se ci sono errori.

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

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

Avete bisogno di un po’ di intelligenza lato server per questo. L'HTML da solo non basta, perché è statico. Un modo comune sarebbe il php. Molte offerte ospitate hanno php installato di default.

Puoi usare un programma ftp per mettere un file di testo nella directory principale del tuo 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');
?>

Diciamo che il tuo dominio è “example.com”, se visiti questa pagina nel tuo browser: http://example.com/run.php

allora 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 potranno accedere a questa pagina, anche i robot. Si potrebbe proteggere la pagina con htacces.

2) Questa pagina si attiva in caso di una normale richiesta “GET” dal browser. Ma implica un'azione sul server, e se questa azione cambia i dati o fa qualcosa di importante, sarebbe meglio lanciare lo script solo su una richiesta POST.

3) Si può inserire una dichiarazione di modulo / pulsante per poter ricaricare / eseguire nuovamente la pagina. Assicurati di usare il metodo giusto (GET o POST) nell'attributo method della dichiarazione del modulo HTML.

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

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

Potrebbe essere un problema di permessi.

Quando l'hai attivato usando webapp, è apache che esegue lo script. Se apache non ha il permesso di eseguire lo script non funzionerà.

Soluzione: controlla i permessi e riprova… :)

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

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

So che questo non risponde alla domanda aggiornata, ma ho trovato questo mentre cercavo di capire le cose da solo e ho pensato di postarlo!

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

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

Options +ExecCGI
AddHandler cgi-script .sh

Questo dice al server web di trattare i file .sh come script CGI. Non dimenticare di cambiare i permessi dei file .sh a 755.