千不该万不该在js社区推py
@zengming00 这个是一个技术社区,应该讨论和发布关于 nodejs 的帖,而不是其他技术的就让他出门左转,甚至拉出去枪毙。
这又不是信仰,是大伙恰饭的工具而已
@zengming00 对不住,前端渣渣,之所以在这里发是因为觉得这个社区氛围很好,没啥戾气,不知道有咩有block功能,如果有麻烦你把我block了吧,抱歉
@axetroy 千言万语化成一句感谢!
@ops-coffee 很欢迎的~~~
挺不错的,不过从我个人角度来看,现在的趋势是越来越不给开发者直接上服务器的权限了,尤其是安全容器出来后,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。
更新一下,添加了录像功能,可以对所有操作进行录像,并回放
没发现源码啊
再更新一下,有添加了实时在线监控和强制踢用户下线功能
挺有意思的,我找了半天也没找到源码ˇ,OGM
最近在写一套系统,管理服务器的,前端 Nodejs + Nuxt, 后端 Golang
开发/运维人员无需知道服务器的密码/密钥,只需简单的配置,邀请人员加入工作组即可在 web 端操作服务器
后面加上
- 终端录像: 自动记录终端的每一次输入和输出,支持播放。没看你的实现思路,但把整个流信息存储起来,再输出到终端即可
- 终端限时:限制一次回话终端打开时间,超时则断开连接
- 终端分享:把终端以一个 URL 的形式,分享给其他人,打开 URL 即可操作终端,连接只可用一次,不能重新打开
思路已经有了,也开始做了,稍微晚点,待完善点之后,再开源
@axetroy 非常棒!
翻遍了google都没有找到答案,最后各种源码解读,有添加了新功能lrzsz支持文件上传下载,这功能现在各大云厂商的web终端似乎都还没有支持
上面这个功能可能让服务器的安全系数降低很多。不是没有大厂支持,而是觉得没有必要。
@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,感谢大佬推荐,我好好学习下
@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
源码这里
然后返回给前端,解析然后逐条数据进行渲染
@axetroy 👌,懂了
@axetroy 大佬 666,继续做的更好呀
@axetroy 哈哈哈哈
这贴的东西好新奇。