阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 761阅读
  • 0回复

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

级别: 论坛版主
发帖
371
云币
447

Websocket Shell maW,YOyRN  
web目录可以部署在任意的http服务器上 O RAKg.49  
z'GYU=  
-*t4(wT|j  
web客户端可以通过注册账号和修改密码修改config.json的账号的信息 Uax[Zh[Cg  
{L^b['h@  
q'{LTg0kk  
账号权限信息和可执行命令由超级用户在管理界面修改 D^V0kC p!F  
"$#X[ .  
!c,=%4Pb  
python通过配置文件config.cfg配置的url路径读取config.json的内容,主要用于校验 cD5c&+,&I  
0 UdAF  
MdM^!sk&`  
在python运行期间如果有新注册账户登录就重新读取url内容 Ad!= *n  
oVk*G  
#Ux*":  
这里解释一下用到的两个bison_key %GG:F^X#  
%v 0 I;t  
X=$WsfN.h  
config.php用到的key主要用来加密密码和配置数据的接口,python获取数据的时候要用到同样的key =g| e- XC  
H=b54.J8&  
%6rMS}  
login.php用到的key用来和时间戳生成一个token,JavaScript拿着这个token去和python建立连接,python在校验这个token的合法性时 需要用到同样的key F/GfEMSE  
ti$d.Kc(  
gw[\7  
因为打开页面的浏览器需要跟server.py运行服务在一个内网,因为他们需要建立socket链接 -ZwQL="t  
el GP2x#:  
qOOF]L9r%u  
客户端的JavaScript通过websocket跟服务端的python建立链接,发送命令的id,服务端寻找id对应的命令然后执行 <Th) &  
{KkP"j'7h  
78a!@T1#  
执行的结果实时回显在客户端的页面上 1 ?X(q  
C/AqAW1  
c *<"&  
本项目从下面的项目修改而来 https://github.com/Pithikos/python-websocket-server.git . !gkJ  
;:(kVdb  
f%r0K6p  
之前一直想让普通用户在未获得linux账号的前提下执行一些linux或mac上的shell 如服务器更新,app发布,配置数据更新等 \Y;LbB8D  
" p]bsJG  
|KSd@   
此前的做法一直是winscp或putty脚本来实现,缺点是不安全也不够灵活,账户和密码都在明文的脚本里边放着 w D|p'N  
:9`'R0=i^  
NR3]MGBKv  
本项目解决了这个问题,普通用户通过点击网页就可以完成执行命令的操作了 跟jenkins(http://jenkins-ci.org/ )的功能可能有重合,有时间了我去试下,不过这个项目更轻便一些 xDtq@Rb}  
0sxZa+G0o  
% H"A%  
用法说明: fa#xEWaFr  
jY^wqQls  
="%nW3e@  
将python-websocket-shell/web目录设置为网站的根目录 Vq[L4  
删掉没必要的账号,注册新的账号,修改账号权限,数值越小权限越大,0是超级用户可以由执行命令,不过这个“自由”仍然有限制 d) V"tSC,  
超级用户通过管理页面修改脚本对应的权限值 }9Yd[`  
修改web/config.json的adrress为server.py监听的ip和端口,JavaScript要根据它与python服务器建立websocket连接 "r@f&Ssxb  
./start.sh 启动websocket的服务端 Yr9>ATR  
修改nginx的配置不允许访问config.json,现在即使允许访问也看不到密码,为防止暴力破解密码还是不允许的好 _"BYnPq@wb  
启动服务 ./start.sh :=J~t@  
ziFg+i%s  
WH`E=p^x4  
停止服务 ./start.sh stop #is1y3yh  
tnx)_f  
n<Vq@=9AE  
web目录为root的nginx配置写法如下,location后面的位置是从web的根目录开始的 Z0yy<9q]2  
Z7 \gj`  
z'cK,psq(  
location =/config.json{ Ie3 F  
    return 404; 5p9zl=mT  
} @8[3 ]<  
apache的配置 7MX nt5qUh  
t- Rp_2t  
wSrq?U5q  
<Directory "/Library/WebServer/Documents"> ^4jIT1  
    Options FollowSymLinks Multiviews {+Rf?'JZH  
    MultiviewsMatch Any " oWiQ{\IP  
    AllowOverride None >3R%GNw  
    Require all granted `1I@tz|  
    <Files ~ "\.json$"> qEd!g,Sx  
       Order allow,deny R-v99e iN  
       Deny from all M,0@@:  
    </Files> )ESF)aKMiz  
</Directory>  '%! '1si  
之所以没选择数据库来配置只是为了让网站更容易配置,本项目的初衷就是为了更方便的让普通用户访问脚本 -#yLH  
&<{=  
o)NQE?  
项目地址: 99T_y`df  
https://github.com/zhulangren/python-websocket-shell U p1&(  
[ 此帖被寒喵在2018-12-31 23:09重新编辑 ]
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
验证问题: 79 + 16 = ?
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)