本次修改是对原有功能的Shell命令及NetDispatch的替换,原功能存在较多问题

Shell命令

存在操作不方便,不支持交互式命令,能利用漏洞进入服务器后台,获取root权限等问题


NetDispatch

存在连接丢失,服务端程序奔溃退出等问题



本地设备的webssh功能

增加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");

		response.EndObj();
		response.EndResult();
		return 0;
	}

	const char *CWebSSH::GetName()
	{
		return "webssh";
	}

效果如下




部署frp功能

# 服务端
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 = "admin"
webServer.password = "msj123"
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


客户端 /etc/frp/frpc.toml

serverAddr = "49.234.66.123"
serverPort = 9000

auth.method = "token"
auth.token = "msj123"

webServer.addr = "0.0.0.0"
webServer.port = 9003
webServer.user = "admin"
webServer.password = "msj123"
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-ar则属于arm64

有些开源软件可以直接下载编译好的软件使用


frpc

frpc

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

编译时候会有报错,修复后编译放到设备上可以正常运行


  • 无标签