2013-09-01 209 views
1

我在将数据发布到数据库上的远程服务器上有一个程序。 该程序必须使用root权限执行才能正常运行。 我必须从网页开始执行。即,如果事件触发,此脚本的执行应该开始(现在将事件视为单击按钮)在网页上执行服务器上的shell脚本

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

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

我将使用密钥对ssh进入服务器,然后有一个shell脚本以root身份执行控制并开始执行程序。

我不想在我的网页上解析或打印任何输出。 只是开始脚本将完成这项工作。

有人可以帮我解决这个问题吗..

谢谢!

+0

Javascript,(其中包括jQuery)是一种客户端技术。如果没有服务器端系统来完成这项工作,它将无法在服务器上执行任何操作。您可能会选择使用某种形式的AJAX调用,或者只是发出HTTP GET(或POST)请求。您将无法使用Javascript连接到SSH – 2013-09-01 02:58:04

回答

0

问题是JavaScript不支持TCP/IP套接字,因此在JavaScript中完全不可能使用纯粹的。但是,您可以使用AJAX Web套接字(如WebShell和AnyTerm)完成此操作,并让服务器在本地处理和验证会话。

如果你绝对需要在客户端完成所有工作,另一个选择是使用在用户浏览器中运行的java applet。很明显,这个applet可以作为一个终端shell,但是根据你的需要,你可以很容易地打开applet,验证,运行脚本,然后传回确认脚本开始OK。

+0

好。 我正在努力解决这个问题。 首先我使用ssh-keygen 然后我复制我的公钥使用 的ssh-copy-id命令-i的〜/ .ssh/id_rsa.pub远程主机 但是当我在远程主机创建密钥对试图执行一个sudo su或sudo -i命令使用该shell脚本,我不能... 我是在Linux编程新手,我不知道发生了什么。 和我的远程机器是一个覆盆子pi和它的根用户禁用..所以我不能ssh作为根。 –

+0

好的,不是问题;当他们出发时,这里没有人是专家。所以基本上,从我所知道的情况来看,您似乎没有授予用户作为超级用户的权限。您在RasPi上运行的是哪个版本的Linux?如果您正在运行Ubuntu或其变体,您可以通过运行'sudo add sudo'来解决此问题。基本上你正在做的是将用户USERNAME添加到sudo组中。这将使他们有权以超级用户身份运行命令。 – CRK

+0

另一点,由于远程访问被禁用(因为它应该是!),你将不得不直接在RasPi上完成上述步骤,而不是通过SSH。另外,如果要进一步修改根,sudo和admin组的权限,可以使用visudo命令编辑超级用户文件。干杯! – CRK

0

由于您无法以root用户身份登录到服务器,因此您需要设置一个可执行脚本,该脚本将以root用户身份运行,并且可以从ssh用户的常规用户中调用。要做到这一点:

CHOWN根可执行

chgrp命令根可执行

搭配chmod 4755可执行

不幸的是出于安全考虑可执行不能是一个shell脚本(Linux下是这样),所以你需要编写一个包含大量system()调用的简短C程序。编译这个,你应该离开。当然C程序可以像

系统(“./ executable”);

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

相关问题