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

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

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

Websocket Shell *n? 1C"l  
web目录可以部署在任意的http服务器上 `NsjtT'_  
i U$ ~H  
pD732L@q  
web客户端可以通过注册账号和修改密码修改config.json的账号的信息 Y$r78h=4  
y~ =H`PAE  
ump~)?_B  
账号权限信息和可执行命令由超级用户在管理界面修改 hJ'H@L7  
e{P v:jl  
~.m<`~u  
python通过配置文件config.cfg配置的url路径读取config.json的内容,主要用于校验 )#}>,,S  
"#j}F u_!  
dw bR,K  
在python运行期间如果有新注册账户登录就重新读取url内容 `Z?wj@H1`  
K T}  
pIJXP$v3  
这里解释一下用到的两个bison_key []>'Dw_r  
I0)`tQ +  
u*l|MIi6J  
config.php用到的key主要用来加密密码和配置数据的接口,python获取数据的时候要用到同样的key wSTul o:9  
??rS h Mu  
Dm>"c;2  
login.php用到的key用来和时间戳生成一个token,JavaScript拿着这个token去和python建立连接,python在校验这个token的合法性时 需要用到同样的key 7~/cz_  
yw3"jdcl  
NK_|h %  
因为打开页面的浏览器需要跟server.py运行服务在一个内网,因为他们需要建立socket链接 >gk_klLh  
(\9`$   
:]^e-p!z  
客户端的JavaScript通过websocket跟服务端的python建立链接,发送命令的id,服务端寻找id对应的命令然后执行 'ZfgCu)St  
^OR0Vp>L  
m~ tvuz I  
执行的结果实时回显在客户端的页面上 kmI0V[Y  
^:eZpQ [,  
~C.*Vc?|  
本项目从下面的项目修改而来 https://github.com/Pithikos/python-websocket-server.git {meX2Z4  
157_0  
Ccf/hA#mb  
之前一直想让普通用户在未获得linux账号的前提下执行一些linux或mac上的shell 如服务器更新,app发布,配置数据更新等 E$e7(D  
/:&!o2&1H  
C|(A/b  
此前的做法一直是winscp或putty脚本来实现,缺点是不安全也不够灵活,账户和密码都在明文的脚本里边放着 [4Z 31v>  
{f!/:bM  
]n22+]D  
本项目解决了这个问题,普通用户通过点击网页就可以完成执行命令的操作了 跟jenkins(http://jenkins-ci.org/ )的功能可能有重合,有时间了我去试下,不过这个项目更轻便一些 2ej7Ql_@c  
Nk`UQ~g$  
(B7G'h.?  
用法说明: .J"N}  
OG,P"sv  
I$n= >s  
将python-websocket-shell/web目录设置为网站的根目录 Zo9<96I&  
删掉没必要的账号,注册新的账号,修改账号权限,数值越小权限越大,0是超级用户可以由执行命令,不过这个“自由”仍然有限制 US6_5>/  
超级用户通过管理页面修改脚本对应的权限值 !Brtao"m  
修改web/config.json的adrress为server.py监听的ip和端口,JavaScript要根据它与python服务器建立websocket连接 #x%'U}sF  
./start.sh 启动websocket的服务端 yqK4 "F&  
修改nginx的配置不允许访问config.json,现在即使允许访问也看不到密码,为防止暴力破解密码还是不允许的好 8!g `bC#%  
启动服务 ./start.sh I$Nh|eM  
~xH&"1  
[&Xp]:M'D  
停止服务 ./start.sh stop T) C@6/  
BG{f)2F\  
F /b`[  
web目录为root的nginx配置写法如下,location后面的位置是从web的根目录开始的 W+XWS,(  
l{3B }_,  
0bNvmZ$  
location =/config.json{ (z?HyxRT  
    return 404; ,!ZuH?Z  
} }fpya2Xt  
apache的配置 ijI/z5  
-! \3;/  
0QQss  
<Directory "/Library/WebServer/Documents"> 93-Y(Xx)bY  
    Options FollowSymLinks Multiviews e_BG%+;G,  
    MultiviewsMatch Any D{|qP nE4  
    AllowOverride None <QtZ6-;_f  
    Require all granted ;rh.6Dl  
    <Files ~ "\.json$"> h@)U,&  
       Order allow,deny ;#B(L=/  
       Deny from all !`ol&QQ#  
    </Files> &9k~\;x  
</Directory> l,wlxh$}(  
之所以没选择数据库来配置只是为了让网站更容易配置,本项目的初衷就是为了更方便的让普通用户访问脚本 }E`Y.= S  
mDD.D3RS  
Wj{lb_Rj  
项目地址: "SF0b jG9C  
https://github.com/zhulangren/python-websocket-shell PN}+LOD<t  
[ 此帖被寒喵在2018-12-31 23:09重新编辑 ]
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
发表主题 回复主题
« 返回列表上一主题下一主题

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