wentf9/xops-cli

GitHub: wentf9/xops-cli

基于Go的单文件运维CLI工具箱,整合SSH批量执行、多后端防火墙管理和MCP协议,让AI Agent能原生参与服务器自动化管理。

Stars: 4 | Forks: 3

# XOps (XOps) 运维工具箱 xops (XOps) 是一个基于 Go 语言开发的命令行运维工具集,旨在简化日常的服务器管理工作。它集成了 SSH 连接管理、远程命令批量执行、文件传输、防火墙配置及网络工具等功能,并提供了基于标签的主机分组管理能力。 ## 🚀 核心功能 - **主机管理 (Inventory)**: 支持对主机进行增删改查,提供别名和标签 (Tags) 分组功能。支持从 CSV 文件批量导入主机及其凭据。 - **SSH 增强**: 快速连接远程主机,支持跳板机 (JumpHost)、Sudo 模式、ssh-agent 认证以及连接信息的自动保存。 - **批量执行 (Exec)**: 支持在单台或多台主机(或按标签分组)上并行执行命令或本地脚本。 - **文件传输 (SCP)**: 支持本地与远程、远程与远程之间的数据传输,支持按分组批量分发文件。 - **防火墙管理 (Firewall)**: 自动识别并管理多种防火墙后端(firewalld, ufw, iptables, nftables)。 - **实用工具**: 集成 DNS 查询、网络探测 (Ping/NC)、编码转换等常用运维工具。 - **安全保障**: 配置文件中的敏感信息(如密码)采用对称加密存储。 - **🤖 MCP 协议支持 (AI 增强)**: 内置 Model Context Protocol 服务端,让 AI Agent 可以原生调用本工具链的能力执行运维操作。 ## 🛠️ 安装 ### 环境要求 - Go 1.26 或更高版本 ### 编译 git clone https://github.com/wentf9/xops-cli.git cd xops-cli go build -o xops ./cmd/cli/main.go ## 📖 快速上手 ### 1. 管理主机信息 # 批量从 CSV 文件导入主机 (支持识别表头: 主机, 端口, 别名, 用户, 密码, 私钥, 私钥密码) # 导入的同时可以将所有主机加入指定标签组 xops inventory load hosts.csv -t web # 或者使用快捷入口 xops loadHost hosts.csv -t web # 导出 CSV 导入模板 xops inventory load -T template.csv # 手动添加一台主机并打上 web 标签 xops host add --name web-01 --address 192.168.1.10 --user root --tag web # 查看主机列表 xops host list # 查看所有标签分组 xops host tags ### 2. SSH 连接 # 通过名称/别名直接连接(会自动保存连接信息) xops ssh web-01 # OpenSSH 兼容风格连接 xops ssh -l root -p 22 192.168.1.11 xops ssh root@192.168.1.11 # 通过跳板机连接(-J 兼容 OpenSSH) xops ssh -J jumphost root@192.168.1.12 # 使用私钥认证(-i 兼容 OpenSSH) xops ssh -i ~/.ssh/id_rsa root@192.168.1.13 # 建立本地端口转发隧道并挂起 (-L/-N 兼容 OpenSSH) xops ssh -L 8080:localhost:80 -N web-01 # xops 增强功能:连接时指定分组标签 xops ssh --tag db root@192.168.1.11 # xops 增强功能:以 sudo 模式连接 xops ssh --sudo web-01 ### 3. 批量命令执行 # 对 web 分组的所有主机执行 uptime xops exec -t web -c "uptime" # 并行数设置为 5,执行本地脚本 xops exec -t web --shell ./setup.sh --task 5 ### 4. 文件传输 # 将本地文件上传到指定分组的远程目录 xops scp ./config.conf -t web --dest /etc/app/ ### 5. 防火墙操作 # 查看远程主机的防火墙规则 xops firewall list -H web-01 # 在远程主机上开放 80 端口 xops firewall port 80 --proto tcp ### 6. AI Agent 集成 (MCP Server) 使用支持 Model Context Protocol 的 AI Agent (如 Claude Desktop, Cursor, Cline 等) 可以直接调用本机配置的 `xops` 能力。 只需在您的 MCP 客户端配置信息中加入以下内容: { "mcpServers": { "xops": { "command": "/这里填入绝对路径/xops", "args": ["mcp"] } } } 配置完成后,您的 AI Agent 即可直接查询您的主机节点并自动帮您执行管理指令。 ## 🌐 国际化 (i18n) xops 支持简体中文和英文两种界面语言,默认语言为中文。 ### 切换语言 语言检测按以下优先级:`--lang` flag > `XOPS_LANG` 环境变量 > `LANG` 环境变量 > 默认中文 # 方式一:通过 --lang flag(对当前命令生效) xops --lang en ssh web-01 # 方式二:通过环境变量(对整个会话生效) export XOPS_LANG=en xops host list ### 为翻译做贡献 翻译文件位于 `pkg/i18n/locales/` 目录下: - `active.zh.yaml` — 简体中文 - `active.en.yaml` — English 如需添加新的翻译 key,请在两个文件中同时添加。翻译使用 [go-i18n](https://github.com/nicksnyder/go-i18n) 格式,支持 `{{.Var}}` 模板变量。 ## 🎨 ANSI 颜色输出 在管道或重定向环境中,xops 会自动禁用 ANSI 转义序列,避免将控制字符写入文件或传递给下游命令。 ### 控制方式 - **`--color=auto`**(默认):自动检测 stdout/stderr 是否为 TTY,非 TTY 时禁用颜色 - **`--color=never`**:强制禁用颜色 - **`--color=always`**:强制启用颜色(如管道场景下仍需要颜色) - **`NO_COLOR` 环境变量**:非空时禁用颜色(符合 [no-color.org](https://no-color.org/) 约定) 优先级:`--color` flag > `NO_COLOR` 环境变量 > TTY 自动检测 # 管道场景下自动无颜色 xops host list | less # 强制禁用颜色 xops --color=never host list # 通过环境变量全局禁用 export NO_COLOR=1 xops host list ## 📂 配置文件 工具默认将配置存储在用户家目录下的 `.xops` 文件夹中: - `~/.xops/xops_config.yaml`: 存储节点、主机及身份认证信息(敏感字段已加密)。 - `~/.xops/secret.key`: 用于加解密的密钥文件,请务必妥善保管,首次运行时自动生成。 - `~/.xops/audit.log`: MCP 护栏审计日志(JSON Lines 格式,记录 Agent 的所有工具调用)。 完整的配置项说明及示例请参考 [xops_config.example.yaml](xops_config.example.yaml)。 ## 📅 规划与进度 (Roadmap) 当前项目核心运维能力已实现闭环,并正向着 AI Agent 原生运维工具箱的方向演进: - [x] **引入 MCP (Model Context Protocol) 核心支持** (`xops mcp`) - [x] 工具:`xops_list_nodes` (查询本地节点) - [x] 工具:`xops_ssh_run` (远程 SSH 命令执行) - [x] 工具:`xops_read_file` / `xops_write_file` (SFTP 远程读写文件) - [x] 工具:`xops_upload` / `xops_download` (SFTP 文件传输) - [x] 工具:`xops_fs_ls` / `xops_fs_mkdir` / `xops_fs_touch` / `xops_fs_mv` / `xops_fs_rm` / `xops_fs_cp` (远程文件系统操作) - [x] **MCP 安全护栏** (`guardrail`) - [x] 三级风险分类:Safe / Moderate / Dangerous - [x] 命令黑名单(`rm -rf /`、`mkfs`、`dd`、fork bomb 等硬拦截) - [x] 用户审批机制(MCP Elicitation 协议) - [x] 客户端不支持 Elicitation 时的回退策略(兼容 Gemini CLI 等) - [x] 节点级别策略覆盖(glob 模式,`prod-*` 更严格) - [x] JSON Lines 审计日志 - [ ] 工具:接入网络探测能力 (Ping/DNS) - [ ] 工具:接入防火墙规则管理能力 ## 📜 开源协议 本项目采用 [LICENSE](LICENSE) 中所述的开源协议。
标签:CDN识别, DNS查询, EVTX分析, firewalld, Go语言, iptables, IP 地址批量处理, Linux运维, MCP协议, nftables, SSH客户端, ufw, XOps, 主机管理, 内存分配, 并行处理, 批量执行, 数据泄露防护, 文件传输, 日志审计, 服务器管理, 标签分组, 程序破解, 网络信息收集, 网络安全, 网络探测, 自动化运维, 跳板机, 轻量级工具, 运维工具, 远程命令, 配置加密, 防火墙管理, 隐私保护