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

Executar um script de shell com um botão html

Quero lançar um guião de bash quando um botão é premido num website. Esta é a minha primeira tentativa:

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

Mas sem sorte. Alguma sugestão?

EDIT- Seguindo os conselhos de slhclk e mit:

Tenho um ficheiro php em /var/wwww para o qual aponto o meu navegador da web. O conteúdo do ficheiro é o seguinte:

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

tesh.sh contém isto:

screen -S server1 -X quit

Se eu digitar /home/aa/scripts/test.sh em shell, o script é capaz de executar. No entanto, quando aponto o meu navegador para http://example.com/screen.php (que tem o código acima), vejo uma página em branco e o script não tinha sido executado. Ambos têm permissões de execução. Porque é que não funciona?

Respostas (5)

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

O que se está a tentar fazer não é possível dessa forma.

Note que há sempre dois lados para isso: O lado do cliente e o lado do servidor. O script está no computador cliente ou no servidor?


Se estiver no cliente: Você, como visitante, está apenas a ver um website HTML. onClick só poderá lançar JavaScript (ou outras linguagens de scripting ), mas não qualquer script de shell arbitrário que resida no seu computador. Os scripts HTML só funcionam no browser e só podem fazer coisas limitadas. Mais importante ainda, não podem interagir com o seu computador.

Pense sobre isso: Como saberia o navegador como abrir o ficheiro? Não acha que isto seria também uma questão de segurança - um simples website que desencadeia a execução de scripts no computador de um cliente? E se houvesse algo como onClick('rm -rf /home/user')?

Uma alternativa seria executar uma applet Java, se quiser que o código seja executado no cliente, mas isto não é exactamente o mesmo e é algo realmente complicado. Não creio que seja necessário explicar isto em pormenor.


Se o script estiver no servidor: Se quiser executar um script no lado do servidor e pedir ao utilizador para desencadear a sua execução, então terá de usar uma linguagem de programação do lado do servidor. Apenas HTML não o fará, porque é mais ou menos um ficheiro estático. Se quiser interagir com o servidor, pode por exemplo usar PHP .

Tem a função exec para executar um script de linha de comando que é armazenado no servidor web. Assim, basicamente, poderia escrever exec('/path/to/name.sh');& e executaria o script no servidor.

No entanto, apenas colocar isto em onClick não é suficiente aqui. Se ainda não sabe sobre PHP e programação web do lado do servidor, talvez queira ler alguns tutoriais primeiro e depois voltar com uma pergunta mais específica.


Se tiver um ficheiro php com o comando exec(...) apropriado, certifique-se de que o script tem permissões de execução definidas não só para o utilizador mas também para o grupo em que o servidor web se encontra, portanto, no caso mais simples, apenas 777.

Em caso de problemas, verificar o valor de retorno do script com echo exec(...); para ver se há algum erro.

Também se pode executar o script a partir da linha de comando e não a partir do browser com php /path/to/file.php.

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

Para isso, é necessária alguma inteligência do lado do servidor. Só o HTML não é suficiente, porque é estático. Uma forma comum seria o php. Muitas ofertas alojadas têm o php instalado por defeito.

Pode usar um programa ftp para colocar um ficheiro de texto no directório raiz do seu servidor.

O ficheiro de texto poderia ser chamado “run.php” com o seguinte conteúdo:

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

Digamos que o seu domínio é “exemplo.com”, se visitar esta página no seu navegador: http://example.com/run.php

então o ficheiro php será executado no servidor. Será enviada uma página HTML para o browser com o cabeçalho. E o script será executado no servidor.

Há algumas coisas a ter em mente e algumas melhorias possíveis:

1) todos poderão aceder a esta página, também robôs. Poderá proteger a página com htacces.

2) Esta página disparará em caso de um pedido “GET” normal do navegador. Mas involve uma acção no servidor, e se esta acção cancela os dados ou faz algo importante, seria melhor apenas disparar o script num pedido POST.

3) É possível inserir uma declaração de formulário / botão para poder recarregar / executar novamente a página. Certifique-se de usar o método correcto (GET ou POST) no atributo do método da declaração do formulário HTML.

4) Seria bom obter o resultado do script da shell (código rturn e talvez saída de texto) e escrevê-lo no browser. Isto tem problemas suficientes para uma pergunta separada : )

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

Poderia ser uma questão de permissão.

Quando se acciona utilizando webapp, é apache que executa o guião. Se apache não tiver permissão para executar o guião, não funcionará.

Solução: verificar a permissão e tentar novamente… :)

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

Sei que isto é muito tarde mas acho que vale a pena notar que a configuração de CGI num servidor irá permitir-lhe executar um script de bash do lado do servidor sem usar PHP ou qualquer coisa do género.

Eu sei que isto não está a abordar a questão actualizada, mas encontrei isto quando tentei descobrir as coisas por mim próprio, por isso pensei em publicá-lo!

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

Para executar scripts shell directamente do navegador, deve adicionar esta regra ao seu ficheiro .htaccess:

Options +ExecCGI
AddHandler cgi-script .sh

Isto diz ao servidor web para tratar ficheiros .sh como scripts CGI. Não se esqueça de alterar as permissões dos ficheiros .sh para 755.