XOps CLI:单二进制 Go 运维 CLI,主机管理、批量执行、多后端防火墙与 MCP 串在一个命令行里
XOps CLI 把主机管理、SSH 连接、文件传输、批量执行和 Playbook 任务编排收在同一个终端工具里,也可以通过 Model Context Protocol (MCP) 接入 AI 客户端,并对操作做审批和审计。
- 文档:
- 命令参考:
- 故障排查:docs/troubleshooting/index.md
- GitHub:
文档随源码更新,可能包含尚未发布的改动;已安装版本支持的选项以 xops --help 为准。
核心特性
- AI 原生 (MCP 服务端):内置 Model Context Protocol 服务端,支持命令风险评估、审批和审计。
- SSH 增强与 TUI:支持导入 OpenSSH 配置、跳板机、隧道和 SSH Agent 转发。内置 TUI(终端用户界面),并支持自动 Sudo 提权模式。
- 批量执行与传输:基于标签 (Tags) 对多台主机并行执行命令或本地脚本。内置 SCP/SFTP,文件批量分发。交互式 SFTP shell 在连接中断后提示并退出,返回非零状态。
- 声明式任务编排 (Playbook):YAML 编排,组合 shell、script、copy、ensure(幂等性状态收敛)和 template 步骤,支持并发控制与失败策略。
- 资产与凭据管理:本地统一管理主机、凭据 (Identity) 和标签,支持把验证成功的密码保存到离线加密库或其他已配置的凭据存储,支持 CSV 模板批量导入导出。
- 网络与安全工具:集成 DNS 查询、Ping、Netcat (nc)、Base64/Hex 编码转换,以及统一的防火墙管理器(自动适配 firewalld、ufw、iptables、nftables)。
- 国际化:原生支持简体中文与英文,按环境自动切换。
安装
预编译版本(Linux/macOS):
curl -sSL https://raw.githubusercontent.com/wentf9/xops-cli/master/install.sh | bash
从源码构建需要 Go 1.26 或更高版本(Makefile 已适配 Linux、macOS 与 Windows):
git clone https://github.com/wentf9/xops-cli.git
cd xops-cli
make build
# Windows 环境会自动生成 bin/xops.exe;亦可在任意平台使用 make windows 交叉编译
# 或手动编译: go build -o xops ./cmd/cli/main.go
快速上手
1. 初始化
# 创建 Schema v2 配置 ~/.xops/xops_config.yaml(不创建加密密钥)
# 默认导入 ~/.ssh/config 中不含通配符的 Host;不会连接远程主机
xops init
# 使用指定的 OpenSSH 配置,或完全跳过导入
xops init --ssh-config ~/.ssh/config.work
xops init --skip-ssh-import
该命令可重复执行,不会覆盖已有节点。初始化完成后可运行 xops host list 查看导入结果。
新安装默认把验证成功的密码和私钥口令保存在内置离线加密库中,首次保存时自动创建凭据库和密钥文件。连接时加 --remember never 可关闭本次自动保存;配置里 credential.remember_prompted: never 可全局关闭。
通过 SSH、SFTP、SCP 或 exec 首次连接的新节点,仅在 SSH 握手和身份认证成功后自动保存。连接超时、拒绝连接或认证失败不会新增节点;认证成功后即保存,无须等待 Shell 或远程命令成功。已有节点不会因连接失败被删除。显式添加或导入可用 --skip-verify 离线保存。--remember 控制凭据机密保存,不影响认证成功后的节点信息保存。
2. 主机与资产管理
xops host import hosts.csv --tag web
xops host add --address 192.0.2.10 --user root --key ~/.ssh/id_ed25519 --alias web-01 --tags web
xops host list
xops host tags
inventory 仍可作为 host 的兼容别名,host load 仍可作为 host import 的兼容别名;新脚本应使用规范命令。
导入默认只保存 SSH 验证通过的节点,失败行会标记“未保存”;--skip-verify 跳过验证直接保存,--save-on-verify-failure 验证失败也保存,两者互斥。host add 和 TUI 添加节点默认先验证,失败后询问是否保存(默认否)。
3. SSH 连接与 TUI
xops tui
xops ssh web-01
xops ssh test@192.0.2.20 # 显式指定新用户,自动复用已有 Host,独立隔离凭证,自动继承 ProxyJump
xops ssh test@web-01
xops ssh -J bastion.example.com -i ~/.ssh/id_rsa root@192.0.2.13 # 直连跳板 (FQDN 或 IP 或 jumphost:22)
xops ssh -J jumphost -i ~/.ssh/id_rsa root@192.0.2.13 # 别名跳板
xops ssh --sudo web-01
4. 批量执行与文件分发
xops exec --tag web -c "uptime"
xops exec --tag web --shell ./setup.sh --task 5
xops scp ./config.conf --tag web --dest /etc/app/
普通 exec 可以读取 Linux 桌面密钥库中已解锁的现有凭据,无需 -x。-x 用于需要远端终端交互的命令(如 top、vim);普通批处理不会弹出解锁提示。密钥库锁定时返回 locked,需先在桌面解锁;执行进程须能访问该桌面的 D-Bus 会话。
5. 声明式任务编排 (Playbook)
示例 deploy.yaml:
name: deploy-web
targets:
tags: [web]
settings:
concurrency: 2
on_error: stop
vars:
app_port: "8080"
steps:
- name: "安装 nginx"
ensure:
check: "nginx -v"
action: "apt-get install -y nginx"
sudo: true
- name: "渲染并分发配置"
template:
src: "./nginx.conf.tmpl"
dest: "/etc/nginx/nginx.conf"
sudo: true
- name: "启动 nginx 服务"
shell: "systemctl start nginx"
sudo: true
settings.on_error: abort_all 会在任一主机连接失败或步骤失败时取消其他正在进行的主机任务;continue 仅让当前主机继续执行后续步骤。
xops play deploy.yaml --var app_port=8081
xops play deploy.yaml --dry-run
xops play deploy.yaml --limit web-01
6. AI 与 MCP 集成
xops mcp serve
Claude Desktop 的 claude_desktop_config.json 示例:
{
"mcpServers": {
"xops": {
"command": "/usr/local/bin/xops",
"args": ["mcp", "serve"]
}
}
}
安全护栏包括三部分:风险评估(识别 rm -rf 等危险操作)、策略控制(审批阈值、禁止执行的命令、受保护路径)、审计日志(记录 MCP 工具调用及处理结果)。
7. AI Agent Skill 集成
风险提示:Skill 通过赋予 AI 助手执行 xops 命令的能力工作;由于 AI 根据自然语言自主生成命令,技能文件本身不包含强制性的服务端安全护栏。生产环境使用时 AI 可能误执行高危命令(如 rm -rf 或重启服务),需要启用命令执行确认并审核指令。
npx skills add https://github.com/wentf9/xops-cli/master/skills/xops-agent
Skill 包含主机状态查询和防火墙管理的调用说明。
国际化
xops --lang en host list
xops --lang zh host list
语言由 --lang 指定,未指定时按系统环境识别。
License
MIT。
边界与取舍
几点在实际使用前需要知道的:
- MCP 服务端自带风险评估、策略控制和审计日志,但 AI Agent Skill 走的是另一条路径,技能文件本身没有强制性服务端护栏,风险要靠命令执行确认和人工审核兜住。
- 交互式 SFTP shell 在连接中断后提示并退出,返回非零状态,不适合放进无人的批处理流程里长期挂着。
- 凭据库锁定时相关命令直接返回
locked,需要先在桌面解锁,执行进程还必须能访问该桌面的 D-Bus 会话,纯 headless 环境会受限。 - 项目仍处在早期阶段,star 数不多,接口和默认行为存在随版本调整的可能,落地前建议先在测试机上验证一遍关键流程。