痴迷于造轮子的我又来了,这次写了个web系统,接管xshell,crt,实现在web端操作服务器
发布于 4 年前 作者 ops-coffee 12562 次浏览 来自 分享

造了好多轮子,上次发的这篇文章得到了关注我写了个系统,用来一键创建测试环境

陆续更新了一些功能和优化了体验后,用起来也是丝般顺滑了,于是又开始造新轮子了

Django实现WebSSH操作物理机或虚拟机

这个轮子有源码,你可以自己部署使用

41 回复

千不该万不该在js社区推py

@zengming00 这个是一个技术社区,应该讨论和发布关于 nodejs 的帖,而不是其他技术的就让他出门左转,甚至拉出去枪毙。

这又不是信仰,是大伙恰饭的工具而已

@zengming00 对不住,前端渣渣,之所以在这里发是因为觉得这个社区氛围很好,没啥戾气,不知道有咩有block功能,如果有麻烦你把我block了吧,抱歉

@axetroy 千言万语化成一句感谢!

挺不错的,不过从我个人角度来看,现在的趋势是越来越不给开发者直接上服务器的权限了,尤其是安全容器出来后,ssh 和 sh 指令都没了。

@atian25 正常情况下,开发者是没有生产服务器登陆权限的,不过开发、测试环境还可以给嘛,毕竟要查问题,另外这个webssh下一步会添加录像的功能,也就是所有操作都会录制下来,可以回放,用在生产环境,给运维人员使用也更有保障,录像功能下篇文章介绍

@ops-coffee 我们这边是更倾向于通过日志来排查问题,通过单测来保障质量,通过平台来运维。

@atian25 大佬厉害了,我们也有完善的系统流程保障,不过登陆服务器这种操作,不能完全避免,偶尔还是需要

像现在看到基础措施团队在调研 https://github.com/GoogleContainerTools/distroless 做安全镜像,到时镜像里面,连 vi 和 ssh 都没有了。如果是 Node 的话,就一个 node cli,连 npm 都没。再加上日志无盘化,只读镜像。

@atian25 我们这么干过,,but,,这个需要整个团队都有很高的能力,很好的合作,实验下来效果不好,主要是因为我们太菜了。。。不过这也是未来的方向

我的系统还真的需要你的这个应用 VueOS

@biggerV node.js 也一样可以。

@zengming00 拿node写一个,别怂

@i5ting 怂,懒,不写,两三年前写过一个类似的玩意,但是要简单得多,只能执行配置好的命令,有部署在公司服务器上,但从未真正用上

    socket.on('message', function (msg: string) {
      socket.send(`> ${msg}`);

      kill();

      if (!util.isString(msg) || !currentUser) {
        return;
      }
      const msgStr = msg.trim();
      if (!msgStr) {
        return;
      }

      let command: string | null = null;

      // 查找命令
      for (const cmd of currentUser.cmds) {
        if (cmd.name === msgStr) {
          command = cmd.cmd;
          break;
        }
      }
      if (!command) {
        socket.send(`找不到 ${msgStr} 命令`);
        return;
      }
      socket.send(`>> ${command}`);
      const arr = command.split(/\s+/);
      cp = child_process.spawn(arr[0], arr.slice(1));

      function sendMsg(data: any) {
        socket.send(data.toString());
      }

      cp.stdout.on('data', sendMsg);
      cp.stderr.on('data', sendMsg);
      cp.on('error', sendMsg);
      cp.on('close', (code) => {
        socket.send(`\r\nchild process exited with code ${code} \r\n\r\n`);
        cp = null;
      });

    });

@i5ting 我正在用node写类似的运维系统,其实在想是不是用py写更有优势啊

@dengnan123 大多linux会内置py,除此以外,没看出来

做过一个内部使用的工具集成了这个功能, 就是 node 撸的(electron客户端工具),使用 ws + node-pty + xterm.js 。 单独抽出来的话,加上 express 可以部署成 web terminal。

更新一下,添加了录像功能,可以对所有操作进行录像,并回放

文章地址:https://ops-coffee.cn/s/XBKEfJKaucTFFcj-cS95LQ

20191119.gif

没发现源码啊

再更新一下,有添加了实时在线监控强制踢用户下线功能

https://ops-coffee.cn/s/GXhkc8rBHhjjf_wHxd7j3w

挺有意思的,我找了半天也没找到源码ˇ,OGM

最近在写一套系统,管理服务器的,前端 Nodejs + Nuxt, 后端 Golang

开发/运维人员无需知道服务器的密码/密钥,只需简单的配置,邀请人员加入工作组即可在 web 端操作服务器

截屏2019-12-0413.51.47.png

后面加上

  • 终端录像: 自动记录终端的每一次输入和输出,支持播放。没看你的实现思路,但把整个流信息存储起来,再输出到终端即可
  • 终端限时:限制一次回话终端打开时间,超时则断开连接
  • 终端分享:把终端以一个 URL 的形式,分享给其他人,打开 URL 即可操作终端,连接只可用一次,不能重新打开

思路已经有了,也开始做了,稍微晚点,待完善点之后,再开源

翻遍了google都没有找到答案,最后各种源码解读,有添加了新功能lrzsz支持文件上传下载,这功能现在各大云厂商的web终端似乎都还没有支持

https://ops-coffee.cn/s/poC2i859LQwIY1USq2Rfjw

20191206.gif

上面这个功能可能让服务器的安全系数降低很多。不是没有大厂支持,而是觉得没有必要。

@lellansin 具体说说怎么降低了,既然提供了ssh功能

@axetroy 给了我一个很好的思路

@ops-coffee 常见的情况是从 CI/CD 过程自动部署 artifacts 到机器上(or 生成 docker 来自动拉起等),禁止开发者通过非正规流程上传代码和 assets,并且所有文件只有 read 权限禁止用户修改线上的任何东西。ssh 仅供 check 状态,不能用来做任何变更。一旦用户通过 ssh 来做变更,那么下一次正规的流程下来这个应用很可能就挂了(特别是开发者人数大于 2 的时候)。

@lellansin 你说的这个仅仅是特定场景,几乎所有正规的公司生产环境服务器都不允许开发登陆

@ops-coffee Emmm, I work for Alibaba. I’m sure I can.

@lellansin 只能说明阿里这块管理也是烂,生产都应该是ops,sre的活,或者如果有devops职位的话

@ops-coffee 生产可能出现的问题很复杂, 比如网络问题,只能跑到机器上去 check 状态。查看 TIME_WAIT、CLOSE_WAIT、IO-Hang 等等状态,很多这种状态的异常通常跟项目的编码和部署没有任何关系,只跟服务器当前的状态有关。

系统一点的话,推荐你看 Brendan Gregg 的《性能之巅》或者他的博客。可以了解一些常见的登录服务器排查问题的方法,比如《性能之巅》里提到的 USE 方法,它包含 30 种衡量和排查服务器问题的维度以及对应的工具方法推荐。

@lellansin 其实我的本职工作是运维,Troubleshooting是运维的基础,写WebSSH纯粹是对开发的喜爱,没有需求也米有KPI,感谢大佬推荐,我好好学习下

screenshot.gif

前面楼说了要写这么个东西

已经实现了终端回放了

真开源: https://github.com/axetroy/wsm

欢迎一起交流学习

@axetroy 很棒,那个监控怎么玩的

@dengnan123 什么监控?终端的录像吗?

其实就像歌词一样,把终端的流,一帧一帧得记录下来。

做成这样的格式

(2020-01-09 15:14:33.929) ls -lh
(2020-01-09 15:14:33.929) vim xxx.md
(2020-01-09 15:14:33.929) exit

源码这里

1.png

然后返回给前端,解析然后逐条数据进行渲染

@axetroy 大佬 666,继续做的更好呀

这贴的东西好新奇。

回到顶部