Execute um script de shell com um botão html


12

Quero iniciar um script bash quando um botão é pressionado em um site. Esta é a minha primeira tentativa:

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

Mas sem sorte. Alguma sugestão?

EDIT- Seguindo o conselho de slhclk e mit:

Eu tenho um arquivo php em / var / www para o qual aponto meu navegador. O conteúdo do arquivo é o seguinte:

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

tesh.sh contém isso:

screen -S server1 -X quit

Se eu digitar o /home/aa/scripts/test.shshell, o script poderá ser executado. No entanto, quando aponto 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 foi executado. Ambos têm permissões de execução. Por que isso não funciona?


Seria interessante saber que tipo de servidor web é esse. Por exemplo, poderia ser um servidor linux doméstico, uma máquina Windows com XAMPP ou uma oferta padrão de hospedagem em massa de sites com um nome de domínio de um grande host?
mit

Estou em lenny debian que foge um VPS I alugar
dukevin

1
Este é realmente um Dup deste, mesmo perguntado por mesmo usuário ">> stackoverflow.com/questions/6235785/... ., Onde eu postei minha resposta trabalhando sentida eles devem ser ligados.
FreeSoftwareServers

Respostas:


11

O que você está tentando fazer não é possível dessa maneira.

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


Se estiver no cliente: você como visitante está vendo apenas um site HTML. onClicksó poderá iniciar o JavaScript (ou outras linguagens de script ), mas não qualquer shell script arbitrário que resida no seu computador. Os scripts HTML são executados apenas no navegador e podem fazer coisas limitadas. Mais importante ainda, eles não podem interagir com o seu computador.

Pense nisso: como o navegador saberia abrir o arquivo? Você não acha que isso também seria um problema de segurança - um site simples acionando a execução de scripts no computador do cliente? E se houvesse algo assim onClick('rm -rf /home/user')?

Uma alternativa seria executar um applet Java, se você quiser que o código seja executado no cliente, mas isso não é exatamente o mesmo e é algo realmente complicado. Não acho que seja necessário explicar isso em detalhes.


Se o script estiver no servidor: se você deseja executar um script no lado do servidor e fazer com que o usuário inicie sua execução, será necessário usar uma linguagem de programação do lado do servidor. Apenas o HTML não fará isso, porque é mais ou menos um arquivo estático. Se você deseja interagir com o servidor, pode, por exemplo, usar PHP .

Ele tem a execfunção de executar um script de linha de comando armazenado no servidor da web. Então, basicamente, você poderia escrever exec('/path/to/name.sh');e executaria o script no servidor.

No entanto, apenas colocar isso onClicknão é suficiente aqui. Se você ainda não conhece o PHP e a programação da Web do lado do servidor, leia alguns tutoriais primeiro e depois retorne com uma pergunta mais específica.


Se você possui um arquivo php com o exec(...)comando apropriado , certifique-se de que o script tenha permissões definidas não apenas para o usuário, mas também para o grupo em que o servidor da web se encontra, portanto, no caso mais simples 777.

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

Você também pode executar o script na linha de comando e não no navegador com php /path/to/file.php.


Muito obrigado pela resposta completa. O script de shell reside no meu computador. Estou tentando o que você escreveu, no entanto, estou tendo um problema. Eu editei minha pergunta acima
dukevin 4/11

Ok, esta é uma questão diferente então. Você realmente tem o PHP instalado? Tente obter o código de retorno da execlinha escrevendo echo exec(...);. Observe também que o script precisa executar permissões para o grupo em que o servidor da Web é executado, não apenas para o usuário.
slhck

sim, tenho chmod 777 em ambos os arquivos. E eu tentei rodar o php diretamente do shell com resultados estranhos. pastebin.com/eU0xTkp2 No entanto, tenho o php instalado, confirmado php -ve o fato de ter o phpfilemanager para as pessoas editarem arquivos. Por que não está usando o intérprete php?
dukevin

Você precisa executá-lo com php /var/www/trash/run.phpe não apenas o nome do arquivo PHP.
slhck

1
Não é uma coisa! Não tenho muita certeza dos detalhes, mas deve ser porque, quando você o executa na linha de comando, você o executa como usuário correto, enquanto que, quando executado no navegador, o usuário está ausente. Você precisaria verificar isso dentro do seu script de shell, eu acho.
slhck

4

Você precisa de alguma inteligência do lado do servidor para isso. Somente o HTML não é suficiente, porque é estático. Uma maneira comum seria php. Muitas ofertas hospedadas têm o php instalado por padrão.

Você pode usar um programa ftp para colocar um arquivo de texto no diretório raiz do seu servidor.

O arquivo de texto pode ser nomeado "run.php" com o seguinte conteúdo:

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

Digamos que seu domínio seja "example.com", se você visitar esta página no seu navegador:

http://example.com/run.php

então o arquivo php será executado no servidor. Ele enviará uma página HTML para o navegador com o cabeçalho. E o script será executado no servidor.

Há algumas coisas a serem lembradas e algumas possíveis melhorias:

1) todos poderão acessar esta página, também robôs. Você pode proteger a página com htacces.

2) Esta página será acionada no caso de uma solicitação "GET" normal do navegador. Mas invoca uma ação no servidor e, se essa ação alterar dados ou fazer algo importante, seria melhor disparar apenas o script em uma solicitação POST.

3) Você pode inserir uma declaração de formulário / botão para poder recarregar / executar novamente a página. Certifique-se de usar o método correto (GET ou POST) no atributo de método da instrução de formulário HTML.

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


3

Pode ser um problema de permissão.

Quando você o acionou usando o webapp , é o apache que executa o script. Se o apache não tiver permissão para executar o script, ele não funcionará.

Solução: verifique a permissão e tente novamente .. :)


1

Sei que é tarde demais, mas acho que vale a pena notar que a configuração do CGI em um servidor permitirá que você execute um script bash do lado do servidor sem usar PHP ou qualquer coisa do tipo.

Eu sei que isso não está abordando a questão atualizada, mas eu encontrei isso ao tentar descobrir as coisas por conta própria, então pensei em publicá-la!


0

Para executar scripts shell diretamente do navegador, você deve adicionar esta regra ao seu arquivo .htaccess:

Options +ExecCGI
AddHandler cgi-script .sh

Isso indica ao servidor da Web para tratar arquivos .sh como scripts CGI. Não se esqueça de alterar as permissões de arquivo .sh para 755.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.