2013-09-01 131 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程序需要替換參數,那麼您需要驗證這些參數,否則安全性可能會受到影響。至少 - 如果任何參數包含嵌入的';',則檢查並退出而不執行任何操作。

相關問題