Ejecute un script de shell con un botón html

12

Quiero iniciar un script bash cuando se presiona un botón en un sitio web. Este es mi primer intento:

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

Pero sin suerte. ¿Alguna sugerencia?

EDITAR: siguiendo los consejos de slhclk y mit:

Tengo un archivo php en / var / www al que apunto mi navegador web. El contenido del archivo es el siguiente:

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

tesh.sh contiene esto:

screen -S server1 -X quit

Si escribo /home/aa/scripts/test.shen shell, el script puede ejecutarse. Sin embargo, cuando apunto mi navegador web a http://example.com/screen.php (que tiene el código anterior), veo una página en blanco y el script no se ha ejecutado. Ambos tienen permisos de ejecución. ¿Por qué no funciona?

dukevin
fuente
Sería interesante saber qué tipo de servidor web es este. Por ejemplo, ¿podría ser un servidor Linux doméstico, una máquina Windows con XAMPP o una oferta estándar de alojamiento masivo de sitios web con un nombre de dominio de un gran proveedor?
mit
Estoy en Debian Lenny, que se escapa de un VPS que rento
Dukevin
1
Esto es realmente un Dup de esto, incluso preguntado por el mismo usuario ">> stackoverflow.com/questions/6235785/… , donde publiqué mi respuesta de trabajo. Sentí que deberían estar vinculados.
FreeSoftwareServers

Respuestas:

11

Lo que intentas hacer no es posible de esa manera.

Tenga en cuenta que siempre hay dos lados: el lado del cliente y el lado del servidor. ¿Está el script en la computadora del cliente o en el servidor?


Si está en el cliente: usted, como visitante, solo está viendo un sitio web HTML. onClicksolo podrá iniciar JavaScript (u otros lenguajes de script ), pero no cualquier script de shell arbitrario que resida en su computadora. Los scripts HTML solo se ejecutan en el navegador y solo pueden hacer cosas limitadas. Lo más importante, no pueden interactuar con su computadora.

Piénselo: ¿cómo sabría el navegador cómo abrir el archivo? ¿No cree que esto también sería un problema de seguridad, un sitio web simple que desencadena la ejecución de scripts en la computadora de un cliente? ¿Y si hubiera algo así onClick('rm -rf /home/user')?

Una alternativa sería ejecutar un applet de Java, si desea que el código se ejecute en el cliente, pero esto no es exactamente lo mismo y es algo realmente complicado. No creo que sea necesario explicar esto en detalle.


Si la secuencia de comandos está en el servidor: si desea ejecutar una secuencia de comandos en el lado del servidor y hacer que el usuario active su ejecución, debe utilizar un lenguaje de programación del lado del servidor. Solo HTML no lo hará, porque es más o menos un archivo estático. Si desea interactuar con el servidor, podría usar, por ejemplo, PHP .

Tiene la execfunción de ejecutar un script de línea de comandos que se almacena en el servidor web. Básicamente, podría escribir exec('/path/to/name.sh');y ejecutaría el script en el servidor.

Sin embargo, simplemente poner esto en onClickaquí no es suficiente. Si aún no conoce PHP y la programación web del lado del servidor, es posible que desee leer algunos tutoriales primero y luego regresar con una pregunta más específica.


Si tiene un archivo php con el exec(...)comando apropiado , asegúrese de que el script tenga permisos de ejecución establecidos no solo para el usuario sino también para el grupo en el que se encuentra el servidor web, así que en el caso más simple 777.

En caso de problemas, compruebe el valor de retorno del script con echo exec(...);para ver si hay algún error.

También puede ejecutar el script desde la línea de comandos y no desde el navegador con php /path/to/file.php.

slhck
fuente
Muchas gracias por la respuesta completa. El script de shell reside en mi computadora. Estoy intentando lo que ha escrito, sin embargo, me encuentro con un problema. He editado mi pregunta anterior
dukevin
Bien, este es un problema diferente entonces. ¿Realmente tienes PHP instalado? Intenta obtener el código de retorno de la execlínea escribiendo echo exec(...);. También tenga en cuenta que el script necesita permisos de ejecución para el grupo en el que se ejecuta su servidor web, no solo para su usuario.
slhck
Sí, tengo chmod 777 en ambos archivos. E intenté ejecutar el php directamente desde shell con resultados extraños. pastebin.com/eU0xTkp2 Sin embargo, tengo php instalado, confirmado php -vy con el hecho de que tengo phpfilemanager para que las personas puedan editar archivos. ¿Por qué no está usando el intérprete php?
dukevin
Debe ejecutarlo php /var/www/trash/run.phpy no solo el nombre del archivo PHP en sí.
slhck
1
¡No es una cosa! No estoy muy seguro de los detalles, pero debería ser porque cuando lo ejecuta desde la línea de comandos, lo ejecuta como el usuario correcto, mientras que cuando se ejecuta desde el navegador, falta el usuario. Supongo que necesitaría verificar eso dentro de su script de shell.
slhck
4

Necesita algo de inteligencia del lado del servidor para esto. HTML solo no es suficiente, porque es estático. Una forma común sería php. Muchas ofertas alojadas tienen php instalado por defecto.

Puede usar un programa ftp para colocar un archivo de texto en el directorio raíz de su servidor.

El archivo de texto podría llamarse "run.php" con el siguiente contenido:

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

Digamos que su dominio es "example.com", si visita esta página en su navegador:

http://example.com/run.php

entonces el archivo php se ejecutará en el servidor. Enviará una página HTML al navegador con el encabezado. Y el script se ejecutará en el servidor.

Hay algunas cosas a tener en cuenta y algunas posibles mejoras:

1) todos podrán acceder a esta página, también robots. Puede asegurar la página con htacces.

2) Esta página se activará en caso de una solicitud "GET" normal del navegador. Pero invoca una acción en el servidor, y si esta acción cambia los datos o hace algo importante, sería mejor activar el script solo en una solicitud POST.

3) Puede insertar una declaración de formulario / botón para poder volver a cargar / ejecutar nuevamente la página. Asegúrese de utilizar el método correcto (GET o POST) en el atributo del método de la declaración del formulario HTML.

4) Sería bueno obtener el resultado del script de shell (código rturn y quizás salida de texto) y escribirlo en el navegador. Esto tiene suficientes problemas para una pregunta por separado :)

mit
fuente
3

Podría ser un problema de permiso.

Cuando lo activó usando webapp , es apache el que ejecuta el script. Si apache no tiene permiso para ejecutar el script, no funcionará.

Solución: verifique el permiso e intente nuevamente .. :)

usuario635568
fuente
1

Sé que esto es demasiado tarde, pero creo que vale la pena señalar que configurar CGI en un servidor le permitirá ejecutar un script bash del lado del servidor sin usar PHP ni nada por el estilo.

Sé que esto no aborda la pregunta actualizada, pero lo encontré al tratar de resolver las cosas por mí mismo, ¡así que pensé en publicarlo!

Torreh
fuente
0

Para ejecutar scripts de shell directamente desde el navegador, debe agregar esta regla a su archivo .htaccess:

Options +ExecCGI
AddHandler cgi-script .sh

Esto le dice al servidor web que trate los archivos .sh como scripts CGI. No olvide cambiar los permisos de archivo .sh a 755.

Agnel Vishal
fuente