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

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

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

Websocket Shell G{pfyfF  
web目录可以部署在任意的http服务器上 p&>*bF,  
q?nXhUD  
SsIy;l  
web客户端可以通过注册账号和修改密码修改config.json的账号的信息 -}/u?3^-  
j#f+0  
'nz;|6uC  
账号权限信息和可执行命令由超级用户在管理界面修改 u}\F9~W-{  
iKnH6} `?U  
X|TEeE c[L  
python通过配置文件config.cfg配置的url路径读取config.json的内容,主要用于校验 pEuZsQ  
'_lyoVP  
1XSA3;ZEc  
在python运行期间如果有新注册账户登录就重新读取url内容 GbFLu`Iu  
*p`0dvXG2  
`MA ee8u'  
这里解释一下用到的两个bison_key ?l! L )!2  
l"5$6h  
lM86 *g 'l  
config.php用到的key主要用来加密密码和配置数据的接口,python获取数据的时候要用到同样的key Nwr.mtvh  
peCmb)>Sa  
 9f+|m9~2  
login.php用到的key用来和时间戳生成一个token,JavaScript拿着这个token去和python建立连接,python在校验这个token的合法性时 需要用到同样的key >@KQ )p' `  
X6kB R  
'b:e`2fl  
因为打开页面的浏览器需要跟server.py运行服务在一个内网,因为他们需要建立socket链接 3~z4#8=  
jJk M:iR  
T]Gxf"mK  
客户端的JavaScript通过websocket跟服务端的python建立链接,发送命令的id,服务端寻找id对应的命令然后执行 vA2@Db}  
gh=s#DQsFw  
^m;dEe&@F  
执行的结果实时回显在客户端的页面上 BIEc4k5(  
S~d_SU~>`  
#H{<nVvg^  
本项目从下面的项目修改而来 https://github.com/Pithikos/python-websocket-server.git kT@RA}  
(f#QETiV  
I<e[/#5P\`  
之前一直想让普通用户在未获得linux账号的前提下执行一些linux或mac上的shell 如服务器更新,app发布,配置数据更新等 bN$`&fC0  
)f-ux5  
z~Ph=1O>p  
此前的做法一直是winscp或putty脚本来实现,缺点是不安全也不够灵活,账户和密码都在明文的脚本里边放着 79U Th@r}  
vpcHJ^19  
+(0Fab8g  
本项目解决了这个问题,普通用户通过点击网页就可以完成执行命令的操作了 跟jenkins(http://jenkins-ci.org/ )的功能可能有重合,有时间了我去试下,不过这个项目更轻便一些 %lNv?sWb  
gYVk5d|8@4  
T=35?   
用法说明: eZ5UR014  
|-4C[5rM  
Xt~`EN  
将python-websocket-shell/web目录设置为网站的根目录 q$z#+2u  
删掉没必要的账号,注册新的账号,修改账号权限,数值越小权限越大,0是超级用户可以由执行命令,不过这个“自由”仍然有限制 ";E Mu(IXb  
超级用户通过管理页面修改脚本对应的权限值 eZWN9#p2  
修改web/config.json的adrress为server.py监听的ip和端口,JavaScript要根据它与python服务器建立websocket连接  Q];gC{I  
./start.sh 启动websocket的服务端 K-IXAdx  
修改nginx的配置不允许访问config.json,现在即使允许访问也看不到密码,为防止暴力破解密码还是不允许的好 bq[j4xH0X  
启动服务 ./start.sh La48M'u  
Y$b4Ga9j  
:LBG6J  
停止服务 ./start.sh stop }c1Vu  
?z%@;&  
CZRrb84  
web目录为root的nginx配置写法如下,location后面的位置是从web的根目录开始的 jK/2n}q&]  
Tl5K'3  
QLH&WF  
location =/config.json{ p8K4^H  
    return 404; v39`ct=e  
} fL.;-  
apache的配置 vzK*1R5  
V2sWcV?  
'$pT:4EuGq  
<Directory "/Library/WebServer/Documents"> 8T92;.~(  
    Options FollowSymLinks Multiviews {k] 2h4 &h  
    MultiviewsMatch Any fiz2544  
    AllowOverride None *@o@>  
    Require all granted 0}Rxe  
    <Files ~ "\.json$"> (Z5=GJM?$  
       Order allow,deny 9 tkj:8_  
       Deny from all yjs5=\@  
    </Files> (A O]f fBU  
</Directory> @3KVYv,q  
之所以没选择数据库来配置只是为了让网站更容易配置,本项目的初衷就是为了更方便的让普通用户访问脚本 t^ L XGQ  
~E-YXl9  
%<$CH],%  
项目地址: (UDF^  
https://github.com/zhulangren/python-websocket-shell &[,g `S0  
[ 此帖被寒喵在2018-12-31 23:09重新编辑 ]
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
发表主题 回复主题
« 返回列表上一主题下一主题

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