# webconsole **Repository Path**: xiaodingding/webconsole ## Basic Information - **Project Name**: webconsole - **Description**: 一个轻量的企业级Web的控制终端程序,汇集了大多数同类产品优点于一身,支持SSH2/lrzsz、(RDP/RFB/Telnet)、审计和录屏等 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 84 - **Created**: 2023-10-23 - **Last Updated**: 2023-10-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # XCloud WebConsole 一个轻量的企业级Web的控制终端程序,汇集了大多数同类产品优点于一身,支持SSH2/lrzsz、(RDP/RFB/Telnet)、审计和录屏等 English version goes [here](README.md). ### 快速开始 #### step1. 编译安装 ``` git clone https://github.com/wl4g/xcloud-webconsole.git # 推荐上游最新 # git clone https://gitee.com/wl4g/xcloud-webconsole.git cd xcloud-webconsole/scripts ./build.sh # 编译为Linux程序 # build.bat # 编译为Windows程序 ``` ``` ./webconsole_linux_amd64 -c resources/webconsole.yml # 启动(不指定-c则默认从当前目录查找webconsole.yml) Load configuration file '/etc/webconsole.yml'{"level":"info","time":"20-11-07 22:03:49","line":"pkg/webconsole.go:71","msg":"WebConsole server starting...","service":"main"} {"level":"info","time":"20-11-07 22:03:49","line":"admin/metric-exporter.go:142","msg":"Starting prometheus exporter...","service":"main","Listen":":16089"} [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production. - using env: export GIN_MODE=release - using code: gin.SetMode(gin.ReleaseMode) [GIN-debug] GET /terminal/ws/:id --> xcloud-webconsole/pkg/modules/ssh2.NewWebsocketConnectionFunc (4 handlers) [GIN-debug] GET /terminal/session/list --> xcloud-webconsole/pkg/modules/ssh2.QuerySSH2SessionsFunc (4 handlers) [GIN-debug] POST /terminal/session/create --> xcloud-webconsole/pkg/modules/ssh2.AddSSH2SessionFunc (4 handlers) [GIN-debug] POST /terminal/session/delete --> xcloud-webconsole/pkg/modules/ssh2.DeleteSSH2SessionFunc (4 handlers) [GIN-debug] POST /terminal/session/close --> xcloud-webconsole/pkg/modules/ssh2.CloseSSH2SessionFunc (4 handlers) [GIN-debug] Listening and serving HTTP on :26088 ``` #### step2. 部署到nginx (使用https是可选的) > 因为webconsole是基于HTML的,浏览器的复制和粘贴功能受到安全机制的限制,只能在HTTPS下使用,当然若不想麻烦,也可忽略此步骤,直接使用HTTP本地测试,只是不能使用浏览器的复制和粘贴功能。 ``` 127.0.0.1 webconsole.wl4g.debug # 添加hosts ``` ``` sudo mkdir -p /etc/nginx/conf.d && \ sudo mkdir -p /etc/nginx/certs && \ cat > /etc/nginx/conf.d/sslwebconsole.conf < 将CA跟证书安装到系统及chrome使其受信任,例如在Chrome84.x中: ``` chrome://settings/security ``` 管理证书 -> 受信任的根证书颁发机构 -> 导入,然后重启chrome浏览器尝试访问 [https://webconsole.wl4g.debug](https://webconsole.wl4g.debug) ### 特性 - 它被设计成一个原生JavaScript类库,可以很容易地与React/Vue/AngularJS和其他框架集成 - 它可以运行在 `Android iOS` 和任何其他可以呈现HTML的终端上。它几乎可以完全取代基于安装程序的shell客户端 - 完全支持 `lrzsz` 命令集(基于zmodem实现) - 增强了对移动终端的复制、粘贴、快进、后退等按键组合命令的支持,用户友好的操作习惯 - 无缝对接 prometheus 度量采集 ### 度量及指标 ``` curl http://localhost:16089/metrics # HELP goroutines_num Number of goroutines # TYPE goroutines_num gauge goroutines_num 16 # HELP mysql_active_conn Current active connections of MySQL # TYPE mysql_active_conn gauge mysql_active_conn{dbconnectstr="gzsm:******@tcp(10.0.0.160:3306)/devops_dev?charset=utf8",host="10.0.0.172"} 1 # HELP ssh2_active_dispatch_channels Current active channels of SSH2 dispatcher # TYPE ssh2_active_dispatch_channels gauge ssh2_active_dispatch_channels{host="10.0.0.172",user="admin"} 0 # HELP threads_num Number of threads # TYPE threads_num gauge threads_num 8 # HELP virtual_free_memory Size of virtual free memory # TYPE virtual_free_memory gauge virtual_free_memory 1.731424256 # HELP virtual_total_memory Size of virtual total memory # TYPE virtual_total_memory gauge virtual_total_memory 8.50089984 ``` ### 运行环境 - 客户端建议使用 Chrome 40+、Firefox 38+、Safari 9+ - 二次开发建议基于 Golang 1.13+ 构建 - 本程序只能对 Unix/Linux 类的操作系统的 SSH 协议的 OS 远程操作(Windows RDP支持需参考具体发行版是否有RDP实现) ### 运行截图 - ![rz 上传文件](shots/lrzsz-1.jpg) - ![rz 上传文件](shots/lrzsz-2.jpg) > 说明:界面未设置css样式的最精简测试页面 ### 主要依赖项目 - 日志框架 [go.uber.org/zap](go.uber.org/zap) - 通用web框架 [github.com/gin-gonic/gin](github.com/gin-gonic/gin) - 普罗米修斯 [github.com/prometheus](github.com/prometheus) - 主机指标采集 [github.com/shirou/gopsutil](github.com/shirou/gopsutil) - JSON序列化 [github.com/json-iterator/go](github.com/json-iterator/go) - Websocket处理 [github.com/gorilla/websocket](github.com/gorilla/websocket) ### 其他说明(如果需要) - [生成临时调试https SSL证书](https://github.com/wl4g-collect/mkcert) ### 待办清单 - [√] 完全统一每个组件的日常输出,如“gin”框架。 - [√] 增强webconsole服务的管理员功能,例如自身的health/metrics/indicator(CPU/Mem/Network/Connections…)和更详细的指示器 - Canvas + Object Storage 审计录屏功能 - 为了实现与windows RDP(远程桌面协议)兼容的基于Web的远程图像UI控制协议, 以及RFB/Telnet等 ### 自定义开发指南 - 推荐IDE使用 VSCode 进行二次开发,因为项目根目录已包含 .vscode 编辑器配置文件 - 修改数据库配置: resources/webconsole.yml#datasource.mysql.dbconnectstr,也可以使用环境变量:.vscode/launch.json => WEBCONSOLE_DATASOURCE_MYSQL_DBCONNECTSTR - 配置文件说明:本项目使用viper配置框架,加载优先级依次为:Set()/Flags/Env/Config/Default - 如果需要添加新的配置项,则必须使用config_generator.go 生成和xxx-config.go 对应的默认配置项webconsole.default.yml.go,参考命令: ``` cd $WEBCONSOLE_HOME go run config_generator.go Successfully for pkg/config/webconsole.default.yml.go ```