欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

通过 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 进行配置。如果是在内部局域网,可以改动程序,将全部权限放开。

文件位置如下:

通过 open falcon 的 agent 的http 接口实现远程系统命令调用

源代码:

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 接口执行系统命令了。