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

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

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

Websocket Shell ~ymSsoD^  
web目录可以部署在任意的http服务器上 Xif>ZL?aXb  
Z ?ATWCa  
qykI[4  
web客户端可以通过注册账号和修改密码修改config.json的账号的信息 EiS2-Uh*TT  
D7Ds*X`!l  
"2:#bXM-  
账号权限信息和可执行命令由超级用户在管理界面修改 u}7r\MnwK,  
pIPjTQ?cq  
{5SJ0'.B2g  
python通过配置文件config.cfg配置的url路径读取config.json的内容,主要用于校验 !N/?b^y  
FX+^S?x.  
w ; PV &M  
在python运行期间如果有新注册账户登录就重新读取url内容 KssIoP   
N::.o+1  
~g *`E!2  
这里解释一下用到的两个bison_key w69G6G(  
BQ {'r^u  
rUmnv%qTS  
config.php用到的key主要用来加密密码和配置数据的接口,python获取数据的时候要用到同样的key ):V)Hrq?x  
CWkAc5  
!/Wv\qm  
login.php用到的key用来和时间戳生成一个token,JavaScript拿着这个token去和python建立连接,python在校验这个token的合法性时 需要用到同样的key lAAPV  
%p};Di[V  
wEEFpn_   
因为打开页面的浏览器需要跟server.py运行服务在一个内网,因为他们需要建立socket链接 /?C6 oj1  
Ws[d.El  
tp b(.`G  
客户端的JavaScript通过websocket跟服务端的python建立链接,发送命令的id,服务端寻找id对应的命令然后执行 |RI77b:pX  
aT=V/Xh}d  
`4"&_ltD  
执行的结果实时回显在客户端的页面上 *4 Kc "M  
Rp.FG   
yF1^/y!@  
本项目从下面的项目修改而来 https://github.com/Pithikos/python-websocket-server.git cWa> rUsF  
L\^H#:?t  
1F?ylZ|~  
之前一直想让普通用户在未获得linux账号的前提下执行一些linux或mac上的shell 如服务器更新,app发布,配置数据更新等 s`,.&  
g%d&>y?1r  
nmrdqSV  
此前的做法一直是winscp或putty脚本来实现,缺点是不安全也不够灵活,账户和密码都在明文的脚本里边放着 R(HW0@R@w  
:w4I+* ]  
Zx,a j  
本项目解决了这个问题,普通用户通过点击网页就可以完成执行命令的操作了 跟jenkins(http://jenkins-ci.org/ )的功能可能有重合,有时间了我去试下,不过这个项目更轻便一些 1;9  %L@  
+isaqfy/  
i{ 2rQy+  
用法说明: sJYs{Wm  
rVx?Yo1F'  
!O#NP!   
将python-websocket-shell/web目录设置为网站的根目录 :6Sb3w5h  
删掉没必要的账号,注册新的账号,修改账号权限,数值越小权限越大,0是超级用户可以由执行命令,不过这个“自由”仍然有限制 "O{:jfq  
超级用户通过管理页面修改脚本对应的权限值 7 m!e\x8  
修改web/config.json的adrress为server.py监听的ip和端口,JavaScript要根据它与python服务器建立websocket连接 As*59jkB  
./start.sh 启动websocket的服务端  ?ik6kWI  
修改nginx的配置不允许访问config.json,现在即使允许访问也看不到密码,为防止暴力破解密码还是不允许的好 V~qlg1h  
启动服务 ./start.sh f5QJj<@  
qbdv  
3mM.#2=@>  
停止服务 ./start.sh stop -%)8=  
AT,?dxP J  
`'<&<P  
web目录为root的nginx配置写法如下,location后面的位置是从web的根目录开始的  W,)qE^+  
Oo 95\Yf$N  
;/-#oW@gQ  
location =/config.json{ *G0r4Ui$  
    return 404; )*3sE1  
} EYF]&+ 9  
apache的配置 qbe9 CF'@_  
a=3{UEi'o  
awa$o  
<Directory "/Library/WebServer/Documents"> Cdd +I5~  
    Options FollowSymLinks Multiviews (T0%H<#+  
    MultiviewsMatch Any t Sf`  
    AllowOverride None s"\o6r ,  
    Require all granted G|Y9F|.!  
    <Files ~ "\.json$"> 6?c(ueiL[  
       Order allow,deny qjp<_aw  
       Deny from all Px))O&w{  
    </Files> P9D'L{yS/x  
</Directory> :S5B3S@|  
之所以没选择数据库来配置只是为了让网站更容易配置,本项目的初衷就是为了更方便的让普通用户访问脚本 (P N!k0Y  
1JoRP~mMxa  
<C_FI` wk  
项目地址: {?9s~{Dl  
https://github.com/zhulangren/python-websocket-shell hol54)7$3:  
[ 此帖被寒喵在2018-12-31 23:09重新编辑 ]
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: 12 - 10 = ?
上一个 下一个