需求来源
本次修改是对原有功能的Shell命令及NetDispatch的替换,原功能存在较多问题
Shell命令
- 操作不方便
- 不支持交互式命令
- 能利用漏洞进入服务器后台,获取root权限等
NetDispatch
- 连接丢失
- 服务端程序崩溃退出等
功能演示
本地设备的webssh功能,账号密码与后台ssh的一致。
如果从本地网口的web访问,会跳转到局域网的ip
如果从远端omc访问,会跳转到omc的ip
如果从本地wifi的web访问,会跳转到wifi的ip
远端omc效果可以看到,从公网访问到了局域网设备(192.168.1.198),并且通过局域网访问了192.168.1.27(编译服务器)
在公网上写文件时,从本地终端也实时刷新了数据
实现方法
后端
设备端GatewayServer需增加jsoncmd的解析命令
int CWebSSH::Handle(HTTPServerRequest &request, CJSRPCResponseMaker &response, Poco::URI &uri) { response.BeginResult(); response.BeginObj(NULL); response.AddMemberString("url", " http://192.168.1.198:8080"); // demo,具体实现较复杂,参看实际代码 response.EndObj(); response.EndResult(); return 0; } const char *CWebSSH::GetName() { return "webssh"; }
前端
本地webssh已经修改成功,需要新增omc上的远程webssh功能
FRPS部署
x86
使用docker部署frps服务端
使用docker部署frpc客户端(x86)
# 服务端 docker run --restart=always --network host -d -v /etc/frp/frps.toml:/etc/frp/frps.toml --name frps snowdreamtech/frps # 客户端 docker run --restart=always --network host -d -v /etc/frp/frpc.toml:/etc/frp/frpc.toml --name frpc snowdreamtech/frpc
配置如下
服务端 /etc/frp/frps.toml
bindAddr = "0.0.0.0" bindPort = 9000 quicBindPort = 9000 transport.maxPoolCount = 2000 transport.tcpMux = true transport.tcpMuxKeepaliveInterval = 60 transport.tcpKeepalive = 7200 transport.tls.force = false webServer.addr = "0.0.0.0" webServer.port = 9003 webServer.user = "xxxxxx" webServer.password = "xxxxxx" webServer.pprofEnable = false log.to = "./frps.log" log.level = "info" log.maxDays = 3 log.disablePrintColor = false auth.method = "token" auth.token = "msj123" allowPorts = [ { start = 60000, end = 65535 } ] maxPortsPerClient = 1024 udpPacketSize = 1500 natholeAnalysisDataReserveHours = 168
x86客户端 /etc/frp/frpc.toml
serverAddr = "49.234.66.123" serverPort = 9000 auth.method = "token" auth.token = "xxxxx" webServer.addr = "0.0.0.0" webServer.port = 9003 webServer.user = "xxxxxx" webServer.password = "xxxxxx" webServer.pprofEnable = false [[proxies]] name = "192.168.1.27-ssh" type = "tcp" localIP = "192.168.1.27" localPort = 22 remotePort = 60120
服务端需要配置安全组,开放对应的端口
9000为服务端给客户端提供的连接端口
9003为服务端的控制面板
60000~65535为客户端的映射端口
查看服务端控制面板,客户端已经注册成功,并且已经将ssh端口映射到公网使用
客户端可以直接在控制台修改需要映射的端口
终端设备
终端设备一般为arm或者arm64的平台,整套流程终端设备需要使用到的两个软件为frpc和ttyd
大体上来说,我们公司使用的交叉编译器为两大类arm32或者arm64,其他变体其实也属于这两类
例如,新唐平台(AGN1,AGO1等)的arm-linux-gcc,(AGN5)arm-openwrt-linux-gcc都属于arm32
瑞芯微的aarch64-rockchip930-linux-gnu-gcc则属于arm64
有些开源软件可以直接下载编译好的软件使用
frpc
下载的frpc文件有点大:13M,使用upx可以将其压缩为4.8M
ttyd
也可以选择自行编译
ttyd依赖的库有json-c-0.17 libuv-v1.44.2 libwebsockets-4.3.3 mbedtls-2.28.5 zlib-1.3.1,ttyd的编译方式可以参考scripts/cross-build.sh
编译时候会有报错,修复后编译放到设备上可以正常运行
注意事项
加入了frpc和ttyd的软件包会变大,升级时对空间的要求会高一点,原有的升级方式需要两倍的升级包空间,这个问题在当前版本已经得到优化。但是如果用优化前的系统来升级优化后的系统,如果数据库文件较大,则可能会存在空间不够的问题,需要注意。
添加评论