通过 open falcon 的 agent 的http 接口实现远程系统命令调用
程序员文章站
2022-07-14 17:37:21
...
open falcon 的 agent 组件是一个比较综合的采集客户端,详情可参考官方文档,此处不一一赘述,只是介绍以下如何开启其远程命令调用接口。
1 下载 open falcon 源码
该项目是go语言实现,我是通过 PyCharm 安装 go 插件,来进行编译构建的。
2 接口示例
agent 提供了各种 http 接口,用来提供各种服务,如下图,其中 run.go 就是支持远程命令调用的接口;
可以通过http接口来进行远程命令调用,还是很方便的。
示例: curl -X POST --data 'cd /home; ls;' http://30.0.16.205:1998/run
上述 http 请求会执行 cd 命令,并返回 /home 目录下的文件列表。
3 修改 run.go 文件,并重新构建
由于远程调用涉及到用户权限的问题,agent 会通过配置 TrustableIps 进行配置。如果是在内部局域网,可以改动程序,将全部权限放开。
文件位置如下:
源代码:
func configRunRoutes() {
http.HandleFunc("/run", func(w http.ResponseWriter, r *http.Request) {
if !g.Config().Http.Backdoor {
w.Write([]byte("/run disabled"))
return
}
if g.IsTrustable(r.RemoteAddr) {
if r.ContentLength == 0 {
http.Error(w, "body is blank", http.StatusBadRequest)
return
}
暴力更改为:
func configRunRoutes() {
http.HandleFunc("/run", func(w http.ResponseWriter, r *http.Request) {
if !g.Config().Http.Backdoor {
w.Write([]byte("/run disabled"))
return
}
if g.IsTrustable('127.0.0.1') {
if r.ContentLength == 0 {
http.Error(w, "body is blank", http.StatusBadRequest)
return
}
编译生成 falcon-agent-5.1.2.tar.gz
4 配置部署
#> mkdir /xxx/agent
#> tar -xf falcon-agent-5.1.2.tar.gz
#> mv cfg.example.json cfg.json
将 cfg.sjon 中的 ‘backdoor’ 配置为 true
然后启动 agent
#> ./control start
就通过 http://agent.ip:1998/run 接口执行系统命令了。