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

Ejecutar un script de shell con un botón html

Quiero lanzar un script de 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 no hay suerte. ¿Alguna sugerencia?

EDIT- 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.sh en el shell, el script es capaz de ejecutarse. Sin embargo, cuando apunto mi navegador 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?

Respuestas (5)

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

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. ¿El script está en el ordenador del cliente o en el servidor?

  • *

Si está en el cliente: Usted, como visitante, sólo está viendo un sitio web HTML. onClicksólo podrá lanzar JavaScript (u otros lenguajes de scripting ), pero no cualquier script de shell arbitrario que resida en su ordenador. Los scripts HTML sólo se ejecutan en el navegador y sólo pueden hacer cosas limitadas. Lo más importante es que no pueden interactuar con tu ordenador.

Piénsalo: ¿Cómo podría el navegador saber cómo abrir el archivo? ¿No crees que esto también sería un problema de seguridad: un sitio web sencillo que desencadena la ejecución de scripts en el ordenador de un cliente? Una alternativa sería ejecutar un applet de Java, si quieres que se ejecute código 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 el script está en el servidor: Si quieres ejecutar un script en el lado del servidor y que el usuario desencadene su ejecución, entonces necesitas usar un lenguaje de programación del lado del servidor. El simple HTML no servirá, porque es más o menos un archivo estático. Si quiere interactuar con el servidor, podría por ejemplo utilizar PHP .

Tiene la función onClick('rm -rf /home/user') para ejecutar un script de línea de comandos que se almacena en el servidor web. Así que básicamente, podrías escribir exec y se ejecutaría el script en el servidor.

Sin embargo, sólo poner esto en exec('/path/to/name.sh'); no es suficiente aquí. Si aún no sabes sobre PHP y la programación web del lado del servidor, tal vez quieras leer algunos tutoriales primero y luego volver con una pregunta más específica.

  • *

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

En caso de problemas comprueba el valor de retorno del script con 777 para ver si hay algún error.

También puedes ejecutar el script desde la línea de comandos y no desde el navegador con echo exec(...);.

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

Para ello se necesita algo de inteligencia del lado del servidor. El HTML por sí 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 poner 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 “ejemplo.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) todo el mundo podrá acceder a esta página, también los robots. Podrías asegurar la página con htacces.

2) Esta página se disparará en caso de una petición “GET” normal del navegador. Pero implica una acción en el servidor, y si esta acción cambia datos o hace algo importante, sería mejor disparar el script sólo en una petición POST.

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

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

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

Podría ser un problema de permisos.

Cuando lo activas usando webapp, es apache quien ejecuta el script. Si apache no tiene permiso para ejecutar el script no funcionará.

Solución: comprueba el permiso y vuelve a intentarlo.. :)

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

Sé que esto es muy tarde, pero creo que vale la pena señalar que la configuración de CGI en un servidor le permitirá ejecutar un script bash del lado del servidor sin usar PHP o algo por el estilo.

Sé que esto no se refiere a la pregunta actualizada, pero encontré esto cuando trataba de entender las cosas por mí mismo, así que pensé en publicarlo.

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

Para ejecutar scripts de shell directamente desde el navegador, debe añadir 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 los archivos .sh a 755.