[英]Python script developed to act on input from html (web page) is not executing the shell command
請幫助我的人! 我已經設置了一個 xcat 服務器,以便我可以從中管理我的許多節點。 我想停止直接從我的 xcat 服務器中運行 python 腳本。 我認為為了簡單起見,創建一個網頁作為我的界面並使用 python 作為來自 xcat 服務器的服務器端腳本會更好我發現我的底層 python 腳本並沒有真正完成我想要它做的所有事情。 例如,我的腳本無法啟動或關閉在 xcat 服務器上定義的節點。 為了更好地說明,我的節點 (hs22n12) 是在我的 xcat 服務器 (xcatmn5) 上定義的。 我能夠使用“nodels | grep hs22n12” 在 xcatmn5 上定位該節點並以我認為合適的任何方式操作它,例如通電(“rpower hs22n12 on”)或斷電(“rpower hs22n12 off”)。 但是,當我將此命令構建到我的 python 腳本中以便在我提供來自 html 的輸入時操作它們時,操作不成功。 此處顯示了一些規范:我正在使用 apache,並且我已確認它正在運行 我的 python 腳本在我的 var/www/cgi-bin 中,我可以運行它們我的 htnl 文件位於 /var/www/html請在我的代碼片段下方找到第一個 html 代碼(目前對我來說沒問題並且運行良好)
****<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="title">
<title> Node Provisioning Application </title>
</div>
<form action='cgi-bin/powerOff11.py' method="post">
Enter Node: <input type="text" name ="Node"/>
<input type="submit" value="submit">
</form>
</body>
</html>**
我將很快添加我的 python 代碼這是我的 python 代碼
#!/usr/bin/python
import cgi
import cgitb
import subprocess
import os
import sys
cgitb.enable()
print "Content-type: text/html\n"
form = cgi.FieldStorage()
Node = form.getvalue('Node')
print"<p>%s</p>"% Node
if Node == None:
print"<p>No node provided</p>"
else:
find_node = subprocess.call('nodels | grep ' + Node, shell=True)
if find_node == 0:
print("<p>Node not defined yet!</p>")
else:
if find_node > 0:
print"<p>%s</p>"% Node
p_off = subprocess.call('rpower ' + Node + ' on',shell=True)
print"<p>%s powering on...</p>"% Node
else:
sys.exit()
更新:經過一番挖掘,我能夠為 REST API 啟用 HTTPS 協議,並按照以下說明啟用 HTTPs 證書: https : //xcat-docs.readthedocs.io/en/stable/advanced/restapi /restapi_setup/restapi_setup.html
在我這樣做之后,我實際上能夠通過 https 訪問不同的資源,例如我的 xcat 服務器的存儲庫。 然而,原來的問題變得更加清晰。 每當我嘗試運行需要 root 權限的命令時,我從 http 得到的新響應是:
“錯誤:請求權限被拒絕警告:/usr/share/httpd/.xcat/ 下的客戶端證書未正確設置,請運行'/opt/xcat/share/xcat/scripts/setup-local-client.sh'以‘root’身份生成客戶端證書;否則,xcat 客戶端和 xcatd 之間的 SSL 連接將在沒有證書驗證的情況下建立,並容易受到中間人攻擊。”
這讓我相信我的問題是如何配置 /etc/httpd/conf/httpd.conf 以便能夠請求 root 訪問並從那里發出請求。 請注意,我能夠響應 /usr/bin 目錄中的所有二進制命令,例如(ls、cd 等)(這些命令不需要獲得 root 權限。有人可以指點我如何配置 httpd .conf 這樣我的請求就可以合法地從 /root 到 xcat?謝謝大家的幫助。
再次感謝您抽出時間回答我的問題。 我已經試過了。 看起來這不是問題,但是您已經將我推向了正確的思考方向,超越了實際代碼,考慮了 httpd 的整個 Web 服務配置以及它如何從 xcatd 發出請求。 我能夠進行一些調整,並注意到我能夠從 xcatd 獲得對 /usr/bin/python 中所有二進制命令的響應(例如 ls),但我無法獲得對需要像 lsdef 這樣的 root 訪問權限的命令的響應。 這讓我相信我遇到的問題是我沒有被授予從 http 客戶端請求 root 權限(運行 root 命令)的權限。 我需要一個已經完成 Web 服務配置的人來看看這個。 我相信問題很可能出在 httpd.conf (仍在閱讀它)但又是坦克。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.