Javascript 从网页在服务器上执行shell脚本

Javascript 从网页在服务器上执行shell脚本,javascript,jquery,ajax,shell,ssh,Javascript,Jquery,Ajax,Shell,Ssh,我在远程服务器上有一个将数据发布到数据库的程序。 此程序必须使用root权限才能正常运行。 我必须从一个网页开始执行它。也就是说,如果一个事件发生,这个脚本的执行应该开始(现在考虑事件作为一个按钮的点击) 我知道这可以使用php或其他服务器端脚本语言来完成,但我不得不使用javascript或其他相关技术,如AJAX、jquery等 我担心安全问题,所以这是我的计划 我将使用密钥对ssh连接到服务器, 然后创建一个shell脚本,将控制权作为根,并开始执行程序。 我不想在我的网页上解析或打印任何

我在远程服务器上有一个将数据发布到数据库的程序。 此程序必须使用root权限才能正常运行。 我必须从一个网页开始执行它。也就是说,如果一个事件发生,这个脚本的执行应该开始(现在考虑事件作为一个按钮的点击)

我知道这可以使用php或其他服务器端脚本语言来完成,但我不得不使用javascript或其他相关技术,如AJAX、jquery等

我担心安全问题,所以这是我的计划

我将使用密钥对ssh连接到服务器, 然后创建一个shell脚本,将控制权作为根,并开始执行程序。

我不想在我的网页上解析或打印任何输出。 只要启动脚本就可以了

有人能帮我解决这个问题吗


谢谢

问题在于JavaScript不支持TCP/IP套接字,因此完全用JavaScript是不可能做到这一点的。但是,您可以使用AJAX web套接字(如WebShell和AnyTerm do)完成这项工作,并让服务器在本地处理和验证会话


如果您绝对需要在客户端完成所有操作,另一种选择是使用在用户浏览器中运行的java小程序。显然,这个小程序可以用作终端外壳,但根据您的需要,您可以非常轻松地打开小程序,进行身份验证,运行脚本,然后传回确认脚本启动正常。

由于无法以root用户身份ssh到框中,因此需要设置一个可执行脚本,该脚本将以root用户身份运行,可以从您以root用户身份ssh的普通用户处调用。为此:

chown根可执行文件

chgrp根可执行文件

chmod 4755可执行文件

不幸的是,出于安全原因,可执行文件不能是shell脚本(无论如何在Linux下),因此您需要编写一个包含大量system()调用的短C程序。编译这个,你应该离开。当然,C程序可以简单到

系统(“/可执行”)


但无论如何,这在普通服务器上都是一个巨大的安全漏洞。如果C程序采用参数进行替换,则需要验证这些参数,否则安全性可能会受到影响。至少-如果任何参数包含嵌入的“;”则检查并退出,而不做任何操作

Javascript(包括jQuery)是一种客户端技术。如果没有服务器端系统来完成工作,它将无法在服务器上执行任何操作。您可以选择使用某种形式的AJAX调用,或者简单地发出HTTP GET(或POST)请求。您将无法仅使用Javascriptok连接SSH。我正试图一步一步地解决这个问题。首先,我使用ssh-keygen创建了一个密钥对,然后我使用ssh-copy-id-i~/.ssh/id\u rsa.pub远程主机将我的公钥复制到远程主机,但当我试图使用该shell脚本执行sudo su或sudo-i命令时,我无法。。。我是linux编程新手,不知道发生了什么。我的远程机器是raspberry pi,它禁用了root用户。。所以我不能将ssh作为根;他们刚开始的时候,这里没有一个人是专家。所以基本上,从我所能说的,你似乎没有给用户以超级用户的身份操作的权限。您在RasPi上运行的Linux版本是什么?如果您正在运行Ubuntu或其变体,您可以通过运行“sudo add sudo”来解决这个问题。实际上,您所做的是将用户用户名添加到sudo组。这将授予他们以超级用户身份运行命令的权限。另一点,由于root用户的远程访问被禁用(应该是这样!),您必须直接在RasPi上完成上述步骤,而不是通过SSH。此外,如果要进一步修改root、sudo和admin组的权限,可以使用visudo命令编辑superdoers文件。干杯rPi上的linux版本令人喘不过气来。但这就是我在visudo文件中找到的#includedir/etc/sudeores.d pi ALL=(ALL)NOPASSWD:ALL,所以应该是这样的?