使用html按钮运行shell脚本


12

我想在网站上按下按钮时启动bash脚本。这是我的第一次尝试:

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

但是没有运气。有什么建议?

编辑-遵循slhclk和mit的建议:

我在/ var / www中有一个php文件,该文件指向我的网络浏览器。该文件的内容如下:

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

tesh.sh包含以下内容:

screen -S server1 -X quit

如果我键入/home/aa/scripts/test.shshell,脚本将能够执行。但是,当我将Web浏览器指向http://example.com/screen.php(上面有代码)时,我看到一个空白页,并且脚本未执行。两者都具有执行权限。为什么不起作用?


知道这是哪种Web服务器将很有趣。例如,它可能是家用linux服务器,带有XAMPP的Windows计算机或具有大型托管商域名的标准网站大规模托管产品?
麻省理工学院

我使用的是Debian
Lenny

1
这确实是这方面的一个Dup的,即使是相同的用户问“>> stackoverflow.com/questions/6235785/...,在那里我贴我的工作答案位认为应挂。
FreeSoftwareServers

Answers:


11

您尝试做的事不可能那样做。

注意,总是有两个方面:客户端和服务器端。该脚本是在客户端计算机上还是在服务器上?


如果它在客户端上:作为访客,您仅看到一个HTML网站。onClick将只能启动JavaScript(或其他脚本语言),而不能启动计算机上驻留的任何任意Shell脚本。HTML脚本仅在浏览器中运行,并且只能做有限的事情。最重要的是,它们无法与您的计算机进行交互。

想一想:浏览器如何知道如何打开文件?您是否不认为这也是一个安全问题-一个简单的网站会触发客户端计算机上脚本的执行?如果有类似的事情onClick('rm -rf /home/user')怎么办?

如果您希望在客户端上执行代码,则可以选择运行Java applet,但这并不完全相同,这确实很复杂。我认为没有必要详细解释这一点。


如果脚本在服务器上:如果要在服务器端运行脚本并让用户触发其执行,则需要使用服务器端编程语言。只是HTML不会这样做,因为它或多或少是一个静态文件。如果要与服务器进行交互,则可以使用PHP

它具有exec运行存储在Web服务器上的命令行脚本的功能。因此,基本上,您可以编写exec('/path/to/name.sh');并在服务器上运行脚本。

但是,仅将其放入onClick此处是不够的。如果您还不了解PHP和服务器端Web编程,则可能需要先阅读一些教程,然后再提出一个更具体的问题。


如果您有一个带有适当exec(...)命令的php文件,请确保该脚本不仅为用户设置了执行权限,还为Web服务器所在的组设置了执行权限,因此在最简单的情况下就是这样777

如果出现问题,请检查脚本的返回值,echo exec(...);以查看是否存在任何错误。

您也可以从命令行而不是从浏览器运行脚本php /path/to/file.php


非常感谢您的详尽回答。Shell脚本位于我的计算机上。我正在尝试您写的内容,但是遇到了问题。我已经在上面编辑了我的问题
dukevin 2011年

好的,那是另一个问题。您实际上安装了PHP吗?尝试exec通过编写获取行的返回码echo exec(...);。还要注意,脚本需要您的Web服务器运行组的执行权限,而不仅仅是您的用户。
slhck 2011年

是的,两个文件上都有chmod 777。我尝试直接从shell运行php,结果很奇怪。pastebin.com/eU0xTkp2但是,我确实安装了php,php -v并通过确认,并且我已经有了phpfilemanager供人们编辑文件。为什么不使用php解释器?
dukevin 2011年

您需要使用它来运行它,php /var/www/trash/run.php而不仅仅是PHP文件名本身。
slhck 2011年

1
没事!我不太确定细节,但是应该是因为当您从命令行运行它时,您是以正确的用户身份运行它,而当从浏览器中运行时,则缺少该用户。我猜您需要在shell脚本中检查一下。
slhck 2011年

4

为此,您需要一些服务器端智能。仅凭HTML是不够的,因为它是静态的。一种常见的方式是php。默认情况下,许多托管产品确实安装了php。

您可以使用ftp程序将文本文件放入服务器的根目录中。

文本文件可以命名为“ run.php”,其中包含以下内容:

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

假设您在浏览器中访问此页面,则您的域名为“ example.com”:

http://example.com/run.php

那么php文件将在服务器上执行。它将带有标题的HTML页面发送到浏览器。脚本将在服务器上执行。

需要牢记一些事情并可能进行一些改进:

1)每个人都可以访问此页面,机器人也可以。您可以使用htacces保护页面。

2)如果浏览器发出正常的“ GET”请求,则将触发此页面。但是它涉及服务器上的一个操作,如果此操作更改数据或执行重要操作,最好仅在POST请求上触发脚本。

3)您可以插入一个表单/按钮语句以能够重新加载/执行该页面。确保在HTML form语句的method属性中使用正确的方法(GET或POST)。

4)最好获取shell脚本的结果(返回代码,也许还有文本输出)并将其写入浏览器。这对于单独的问题已经足够了:)


3

可能是权限问题。

当您使用webapp触发它时,是运行该脚本的apache。如果apache没有运行脚本的权限,它将无法正常工作。

解决方案:检查权限,然后重试.. :)


1

我知道这已经很晚了,但是我认为值得注意的是,在服务器上配置CGI将允许您在不使用PHP或任何其他方式的情况下运行服务器端bash脚本。

我知道这不能解决更新的问题,但是我在尝试自己解决问题时就发现了这一点,因此我认为应该发表!


0

要直接从浏览器运行Shell脚本,应将此规则添加到.htaccess文件中:

Options +ExecCGI
AddHandler cgi-script .sh

这告诉Web服务器将.sh文件视为CGI脚本。不要忘记将.sh文件权限更改为755。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.