阿里云
阿里云大学认证0元起
发表主题 回复主题
  • 173阅读
  • 0回复

[解决方案]websocket执行服务端指定的脚本

级别: 论坛版主
发帖
370
云币
639

Websocket Shell moFrNcso  
web目录可以部署在任意的http服务器上 ^n~Kr1}nj  
e:-pqZT`  
aoW2c1`?Z  
web客户端可以通过注册账号和修改密码修改config.json的账号的信息 r+%3Y:dZE  
_hV34:1F  
g5 *E\T%8  
账号权限信息和可执行命令由超级用户在管理界面修改 U*K4qJ6U  
y'>9' /&  
*j83E[(]  
python通过配置文件config.cfg配置的url路径读取config.json的内容,主要用于校验 gLt6u|0q  
^~l@ _r  
nWCJY:q;5  
在python运行期间如果有新注册账户登录就重新读取url内容  Hvz;[!  
lv] U)p  
:I?lT2+ea  
这里解释一下用到的两个bison_key *fi`DiO  
BPW.&2?<  
9mtndTT 5u  
config.php用到的key主要用来加密密码和配置数据的接口,python获取数据的时候要用到同样的key `>KNa"b%$  
fGj66rMGw  
L8.A|  
login.php用到的key用来和时间戳生成一个token,JavaScript拿着这个token去和python建立连接,python在校验这个token的合法性时 需要用到同样的key )$Ib6tYY  
ysp,:)-%G@  
0?FJ ~pu  
因为打开页面的浏览器需要跟server.py运行服务在一个内网,因为他们需要建立socket链接 M3KK^YRN  
8yI4=P"F,  
`TF3Ho\MC  
客户端的JavaScript通过websocket跟服务端的python建立链接,发送命令的id,服务端寻找id对应的命令然后执行 5R.jhYAj  
C-49u<; ,  
e 0$m<5  
执行的结果实时回显在客户端的页面上 !2B~.!&   
LmsPS.It  
~<IQe-Q 5  
本项目从下面的项目修改而来 https://github.com/Pithikos/python-websocket-server.git yp]vDm  
 ]E :L  
1A;,"8kBd  
之前一直想让普通用户在未获得linux账号的前提下执行一些linux或mac上的shell 如服务器更新,app发布,配置数据更新等 :O,,fJ<x.O  
x=K'Jj  
yIpgZ0:h  
此前的做法一直是winscp或putty脚本来实现,缺点是不安全也不够灵活,账户和密码都在明文的脚本里边放着 k%-y \WM  
(u8OTq@  
*.$ov<E.  
本项目解决了这个问题,普通用户通过点击网页就可以完成执行命令的操作了 跟jenkins(http://jenkins-ci.org/ )的功能可能有重合,有时间了我去试下,不过这个项目更轻便一些 k=Wt57jt  
#EKnjh=Uq  
/HqD4GDoug  
用法说明: YuoErP=P  
kot KKs   
~h+B&F+5  
将python-websocket-shell/web目录设置为网站的根目录 qncZpXw^  
删掉没必要的账号,注册新的账号,修改账号权限,数值越小权限越大,0是超级用户可以由执行命令,不过这个“自由”仍然有限制 HF&d HD2f  
超级用户通过管理页面修改脚本对应的权限值 .Xxxz Wyk  
修改web/config.json的adrress为server.py监听的ip和端口,JavaScript要根据它与python服务器建立websocket连接 5M8   
./start.sh 启动websocket的服务端 ][OkydE  
修改nginx的配置不允许访问config.json,现在即使允许访问也看不到密码,为防止暴力破解密码还是不允许的好 (/> yfL]J  
启动服务 ./start.sh rTC|8e  
RHu,t5,  
E}36  
停止服务 ./start.sh stop sdewz(xskj  
&$qIJvMiK  
FNl^ lj`Y  
web目录为root的nginx配置写法如下,location后面的位置是从web的根目录开始的 (d <pxx  
2<2a3'pG  
LM.#~7jC  
location =/config.json{ "VsS-b^P  
    return 404; <dk9n}y<,  
} <PO-S\N  
apache的配置 G0r(xP?  
w' 5W L  
~3Z(0 gujD  
<Directory "/Library/WebServer/Documents"> .= 8Es#  
    Options FollowSymLinks Multiviews )fT0FLl|1  
    MultiviewsMatch Any [9p@uRE  
    AllowOverride None n;dWb$:  
    Require all granted 6& 9q6IIy  
    <Files ~ "\.json$"> 4vH.B)S-  
       Order allow,deny m]\d9%-AT&  
       Deny from all %ZlnGr  
    </Files> ! }awlv;  
</Directory> 4MgG]  
之所以没选择数据库来配置只是为了让网站更容易配置,本项目的初衷就是为了更方便的让普通用户访问脚本 AkqGk5e ^  
AqrK==0N  
JDMsco+j5  
项目地址: K*MI8')  
https://github.com/zhulangren/python-websocket-shell yD ur9Qd6  
[ 此帖被寒喵在2018-12-31 23:09重新编辑 ]
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: ECS是阿里云提供的什么服务? 正确答案:云服务器
上一个 下一个