使用 html 按钮运行 shell 脚本

使用 html 按钮运行 shell 脚本

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

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

但运气不佳。有什么建议吗?

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

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

<?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(包含上述代码),我看到一个空白页,并且脚本尚未执行。两者都具有执行权限。为什么不起作用?

答案1

你想做的事情不可能通过这种方式实现。

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


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

想想看:浏览器怎么知道如何打开文件?你不觉得这也是一个安全问题吗——一个普通的网站触发了客户端计算机上脚本的执行?如果有这样的事情会怎么样onClick('rm -rf /home/user')

如果您希望代码在客户端执行,另一种方法是运行 Java 小程序,但这并不完全相同,而且非常复杂。我认为没有必要详细解释这一点。


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

它具有exec函数运行存储在 Web 服务器上的命令行脚本。基本上,您可以编写脚本exec('/path/to/name.sh');,然后它会在服务器上运行该脚本。

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


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

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

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

答案2

您需要一些服务器端智能来实现这一点。仅使用 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 表单语句的方法属性中使用正确的方法(GET 或 POST)。

4) 最好能获取 shell 脚本的结果(返回代码,也可能是文本输出)并将其写入浏览器。这个问题已经够多了,可以单独问一个问题了 : )

答案3

这可能是权限问题。

当你使用以下方式触发它时网络应用, 这是阿帕奇运行脚本。如果阿帕奇如果没有权限运行该脚本,它将无法工作。

解决方案:检查权限并重试.. :)

答案4

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

Options +ExecCGI
AddHandler cgi-script .sh

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

相关内容