轻量运维工具fastdp v6版本 轻量级、单二进制、无依赖的批量运维工具。在”够用就好”的尺度下用 Go 协程的并发优势替代 Ansible 的 Python SSH 管道开销专注于高频运维场景命令执行、文件传输、状态巡检的秒级响应。fastdp 不是 Ansible 完全替代品。它没有 playbook、没有 facts gathering、没有变量继承体系。如果你需要复杂编排roles、templates、idempotent modules请使用 Ansible。fastdp 适合100 台机器跑条命令看结果这种短平快的即时操作场景。功能特点支持 6 大模块操作shell / copy / fetch / script / ping / check基于主机组的批量管理支持组名和 IP 混合指定并发连接控制基于 Go 协程实现高效调度支持 SSH 密码认证和密钥认证自动查找私钥灵活的配置文件多级加载AI Agent 友好让 fastdp 成为 AI AgentClaude Code、Cursor、OpenCode 等管理多台机器时的首选工具简单易用学习成本低性能对比在相同测试场景下对 4 台远程主机执行date命令工具实际耗时real性能对比fastdp0m0.141s✔️ 快 5.6 倍Ansible0m0.787s为什么快极致并发调度基于 Go 原生协程Goroutine实现细粒度并发控制精准管理 SSH 连接生命周期避免传统多进程模型的资源浪费如 Ansible 的 fork 开销无冗余设计摒弃复杂的兼容性逻辑和冗余配置解析专注核心运维场景让每一次执行都「轻装上阵」上手成本低二进制文件大小只有 8MB 左右无任何依赖无需处理多版本 Python 适配对运维的意义对于批量命令执行、主机状态巡检等高频场景fastdp 可将分钟级操作压缩至秒级真正实现「瞬时响应」的批量运维体验 —— 这意味着巡检效率提升 10 倍以上大规模集群操作不再漫长等待故障排查更及时秒级反馈加速问题定位注测试环境为 4 台同网段 Linux 主机网络延迟 1ms实际性能因网络环境、并发数配置略有差异但核心优势稳定。安装下载发行包最新版本见 Gitee Releases | GitHub Releasestar.gz 包Linux / macOS 通用平台架构下载地址Linuxamd64Gitee | GitHubLinuxarm64Gitee | GitHubmacOSamd64Gitee | GitHubmacOSarm64Gitee | GitHubRPM / DEB 包平台架构包类型下载地址Linuxx86_64RPMGitee | GitHubLinuxx86_64DEBGitee | GitHub注意RPM 包暂为 v6 旧版本v6.1.0 RPM 包后续提供。DEB 包已更新到 v6.1.0。tar.gz 包内容fastdp-v6.1.0-linux-amd64/ ├── fastdp # 主程序可执行 ├── config.toml # 配置文件模板 ├── host # 主机组配置模板 └── fastdp-check.sh # 巡检脚本check 模块使用请选择适合你的安装方式方式一RPM / DEB 包自动系统级安装需 rootRPM 包CentOS / Rocky / openEuler 等注意包名中的ky10是构建环境所致实际无任何系统依赖可在 CentOS / Rocky / openEuler 等主流发行版上正常安装使用。# 安装需要 root 权限sudorpm-ivhfastdp-6-1.ky10.x86_64.rpm# 安装完成后即可使用fastdp--helpDEB 包Ubuntu / Debian 等# 安装需要 root 权限sudodpkg-ifastdp-v6.1.0-linux-amd64.deb# 安装完成后即可使用fastdp--helpRPM/DEB 安装后二进制位于/usr/local/bin/配置文件位于/etc/fastdp/。与方式二相同默认以 root 身份执行。普通用户如需自定义配置可复制到家目录配置加载时家目录优先级最高mkdir-p~/.fastdpcp/etc/fastdp/config.toml ~/.fastdp/cp/etc/fastdp/host ~/.fastdp/cp/etc/fastdp/fastdp-check.sh ~/.fastdp/vim~/.fastdp/config.toml# 将 host_inventory 的值改成家目录的绝对路径如# host_inventory /home/你的用户名/.fastdp/host方式二tar.gz 包安装root用户系统级安装# 解压tar-zxvffastdp-v6.1.0-linux-amd64.tar.gz# 进入目录cdfastdp-v6.1.0-linux-amd64# 安装到系统路径需要 sudosudomvfastdp /usr/local/bin/sudomkdir-p/etc/fastdpsudomv* /etc/fastdp/# 编辑主机组配置sudovim/etc/fastdp/host# 安装完成后即可使用sudofastdp--help普通用户安装无需 root# 解压tar-zxvffastdp-v6.1.0-linux-amd64.tar.gz# 进入目录cdfastdp-v6.1.0-linux-amd64# 复制到家目录mkdir-p~/.fastdp/bincpfastdp ~/.fastdp/bin/cpconfig.tomlhostfastdp-check.sh ~/.fastdp/# 将二进制目录加入 PATH追加到 ~/.bashrc 或 ~/.zshrcechoexport PATH$HOME/.fastdp/bin:$PATH~/.bashrcsource~/.bashrc# 编辑配置将 host_inventory 改成家目录的绝对路径vim~/.fastdp/config.toml# host_inventory /home/你的用户名/.fastdp/host# 编辑主机组配置默认为连接root用户注意修改vim~/.fastdp/host# 安装完成后即可使用fastdp--help从源码编译# 直接编译适合开发者或自定义构建# Giteegitclone https://gitee.com/zhao-pengfei2/fastdp.git# 或 GitHubgitclone https://github.com/perfect12312645/fastdp.gitcdfastdp go build-ofastdp ./cmd/main.gosudocpfastdp /usr/local/bin/# 或使用构建脚本打发布包自动下载源码并构建 tar.gz / rpm / deb# Giteewgethttps://gitee.com/zhao-pengfei2/fastdp/releases/download/v6.1.0/build.sh# 或 GitHubwgethttps://github.com/perfect12312645/fastdp/releases/download/v6.1.0/build.shchmodx build.sh ./build.sh配置文件加载优先级1. ~/.fastdp/config.toml 用户自定义优先级最高 2. /etc/fastdp/config.toml 系统默认 3. ./config.toml 当前目录兜底巡检脚本路径优先级check 模块1. ~/.fastdp/fastdp-check.sh 用户自定义优先级最高 2. /etc/fastdp/fastdp-check.sh系统默认命令补全ZshmacOS / Linux# 查看 $FPATH 是否包含补全目录echo$FPATH# macOS 安装 zsh-completionsbrewinstallzsh-completions# 安装 fastdp 补全如目录不存在需先 mkdir -psudomkdir-p/usr/local/share/zsh/site-functionssudofastdp completionzsh/usr/local/share/zsh/site-functions/_fastdp# ~/.zshrc 文件中确保有下面这两行autoload-Uzcompinit compinit# 生效source~/.zshrc# 验证fastdp[tab][tab]BashLinux# linux 安装 bash-completionsrpm系示例yum-yinstallbash-completion# 生成并安装补全脚本fastdp completionbash/usr/local/etc/bash_completion.d/fastdpchmodr /usr/local/etc/bash_completion.d/fastdp# 重开终端或重新加载source~/.bash_profile# 验证fastdp[tab][tab]快速开始# 在主机组执行命令fastdp shell-auptimeweb# 复制文件到远程主机fastdp copy-sapp.conf-d/etc/ web# 批量拉取远程文件fastdp fetch-r/var/log/messagesall# 执行远程脚本fastdp script-finit.sh db# 检测主机连通性fastdppingall# 环境巡检fastdp check all模块说明1. shell 模块在远程主机执行 shell 命令。参数-a/--args要执行的 shell 命令必需--aggregate聚合函数avg/max/min/sum/median/p95/p99/stddev对命令输出的数字进行跨机聚合-y/--yes危险命令自动确认CI 场景--allow-dangerous显式放行硬拦截的破坏性命令不建议-s/--summary汇总模式只显示失败主机成功主机折叠为一行-q/--quiet静默模式只输出命令原始 stdout无装饰文本适合管道和自动化# 基础用法fastdp shell-adf -hweb# 混合指定组 IP 同时执行fastdp shell-afree -hmasternode192.168.10.100# 引号自由使用fastdp shell-als -l /rootall fastdp shell-aecho hello worldall# 批量输出 IP 主机名配合模板变量 静默模式fastdp shell-aecho {{.ip}} $(hostname)all-q# 192.168.1.10 zpf-server# 192.168.1.11 node-1# 直接写入 /etc/hosts集群初始化场景fastdp shell-aecho {{.ip}} $(hostname)all-q/etc/hosts# 聚合统计平均 CPU 使用率fastdp shell-ampstat 1 1 | awk /Average/{print 100-\$NF}all--aggregateavg# P95 延迟排查毛刺fastdp shell-acurl -o /dev/null -s -w %{time_total} http://api.example.comall--aggregatep95# 负载标准差排查离群节点fastdp shell-acat /proc/loadavg | awk {print \$1}all--aggregatestddev# 中位数 CPU 使用率不受极端值影响fastdp shell-ampstat 1 1 | awk /平均时间/{print 100-\$NF}all--aggregatemedian命令安全检查执行前自动扫描命令分两级防护与区间展开联动展示目标机器清单等级行为示例硬拦截纯破坏性直接禁止执行需--allow-dangerous显式放行rm -rf /、rm -rf /*、fork 炸弹、dd ... of/dev/sdX、 /dev/sdX、根级chmod -R 777 /、kill -9 1需确认有合法场景交互确认[y/N]后执行--yes跳过rm -rf /tmp/*、shutdown/reboot/poweroff、init 0|6# 危险命令默认交互确认fastdp shell-arm -rf /tmp/*master# CI 场景自动确认fastdp shell-arm -rf /tmp/*master--yes每次执行都会记录一条 JSON 执行历史时间/用户/命令/目标主机/成败与改变计数/耗时到执行历史日志默认随配置文件目录history.log可用 history_log 配置路径。script 模块同样会扫描本地脚本内容。–no-history 参数可跳过单次记录。2. copy 模块复制本地文件到远程主机支持 MD5 校验文件相同则跳过、权限同步、多文件、目录递归。参数-s/--source源文件路径可多次指定-r/--recursive源目录路径递归复制可多次指定-d/--dest远程目标路径需为绝对路径必需--no-keep-dir不保留源顶层目录平铺复制目录内容到目标默认保留目录结构复制目录时目标路径必须以/结尾# 单文件复制fastdp copy-sapp.conf-d/etc/ web fastdp copy-srun.sh-d/tmp/run.sh192.168.1.101# 多文件复制fastdp copy-sa.conf-sb.sh-sc.py-d/tmp/ all# 目录递归复制默认保留源目录名fastdp copy-r./configs/-d/etc/app/ all# 结果/etc/app/configs/xxx.yml# 目录递归复制平铺不保留源目录名fastdp copy-r./configs/-d/etc/app/ --no-keep-dir all# 结果/etc/app/xxx.yml# 混合使用fastdp copy-sapp.conf-r./scripts/-d/opt/ all大量文件传输推荐使用 rsync3. fetch 模块批量从远程主机拉取文件基于 SFTP支持通配符匹配。参数-r/--remote远程文件路径支持*?[]通配符必需-d/--dest本地保存目录优先使用命令行参数其次配置文件default_fetch_path兜底./fastdp-fetch--no-ip-dir不创建 IP 目录文件名改为IP_原文件名使用通配符时必须加引号# 批量拉取所有主机 /tmp/sec* 文件# 重要远程路径含通配符时必须用引号包裹fastdp fetch--remote/tmp/sec*all# 拉取指定组/IP 的日志文件fastdp fetch-r/var/log/messagesmaster fastdp fetch-r/root/*.txt192.168.1.101# 指定本地保存目录fastdp fetch-r/tmp/sec?--dest./my-download all# 不创建 IP 目录文件名为 IP_文件名fastdp fetch-r/tmp/*.log--no-ip-dir all后续优化计划支持目录递归拉取和 MD5 幂等性检查已下载且内容一致的文件自动跳过适合定时任务场景。大量文件传输推荐使用 rsync。4. script 模块在远程主机上批量执行本地shell脚本。script 模块执行前会扫描脚本内容危险命令如rm -rf /会触发与 shell 模块相同的安全拦截/确认机制。参数-f/--file本地脚本路径必需文本文件最大 512KB--args传递给脚本的位置参数空格分隔脚本内通过$1$2获取--env传递给脚本的环境变量格式KEYval KEY2val2-y/--yes危险命令自动确认CI 场景--allow-dangerous显式放行硬拦截的破坏性命令不建议-q/--quiet静默模式只输出脚本原始 stdout适合管道和自动化# 基础用法fastdp script-frun.sh all fastdp script-fcheck.sh masternode192.168.1.100# 传递参数和环境变量fastdp script-finit.sh--argseth0 192.168.1.1--envMODEpersist MTU9000all# 静默模式只输出脚本原始 stdoutfastdp script-fcheck.sh all-q5. ping 模块测试远程主机 SSH 连通性。# 全部主机fastdppingall6. check 模块批量主机环境巡检。执行巡检脚本fastdp-check.sh并格式化输出结果。参数-g竖向格式化输出类似 mysql \G-f导出格式支持 csv / md / html / json--only只检查指定字段逗号分隔如cpu_cores,cpu_model,mem-l/--list-fields列出所有可用的检查字段 key固定输出字段18 标准字段支持自定义字段字段说明hostname主机名virt虚拟化os系统版本kernel内核cpu_coresCPU 核心cpu_modelCPU 型号arch架构mem内存net网卡gateway网关disk磁盘firewall防火墙selinuxSELinuxswapSwaptimezone时区sys_time系统时间hw_time硬件时间gpuGPU# 对所有主机执行环境检查默认表格输出fastdp check all# 只检查 CPU 和内存只执行需要的检查更高效fastdp check all--onlycpu_cores,cpu_model,mem# 列出所有可用的检查字段 keyfastdp check all-l# 竖向格式化输出fastdp check all-g# 导出巡检报告fastdp check all-fcsvreport.csv fastdp check all-fmdreport.md fastdp check all-fhtmlreport.html fastdp check all-fjsonreport.json自定义字段编辑巡检脚本~/.fastdp/fastdp-check.sh或/etc/fastdp/fastdp-check.sh在末尾追加keyvalue格式即可自动识别展示# 示例添加自定义字段echomy_custom_fieldhelloechoapp_version$(cat/opt/app/VERSION)竖向展示fastdp check all -f csv report.csv open report.csv生成execl表格如图所示html和md格式同理配置文件路径与加载优先级1. ~/.fastdp/config.toml 用户自定义优先级最高 2. /etc/fastdp/config.toml 系统默认 3. ./config.toml 当前目录兜底配置项说明# 主机清单路径 host_inventory /etc/fastdp/host # 默认并发数协程数即客户端同时连接服务端的数量 # 并发较高时瓶颈通常在客户端fd 上限ulimit -n和本地端口范围 # 建议ulimit -n 4096 sysctl net.ipv4.ip_local_port_range1024 65535 concurrency 50 # 默认 SSH 端口 default_ssh_port 22 # 默认 SSH 用户名 default_ssh_user root # 默认 SSH 连接超时秒不设置或者值为0代表永不超时 default_ssh_timeout 5 # 全局默认密码所有机器统一密码的情况 default_ssh_password # 默认文件拉取存放位置 default_fetch_path ./fastdp-fetch # 执行历史日志开关默认开启 history_enabled true # 执行历史日志路径空自动跟随配置文件目录默认 history.log history_log 主机组配置主机组清单文件用于定义主机分组及主机连接参数路径在配置文件中通过host_inventory指定。格式说明[组名] 主机地址 [参数值 ...]主机地址支持[start:end:step]区间展开零填充自动识别[master] node-[100:105] userroot port22 # 等价于逐行写 node-100 ~ node-105 node-103 passwordspecial # 例外主机单独一行覆盖参数后声明优先支持的参数参数说明默认值userSSH 登录用户rootportSSH 端口22passwordSSH 登录密码空则密钥认证空密钥示例# Web 服务器组 [web] 192.168.1.100 useradmin port2222 192.168.1.101 passwordsecure123 # 数据库服务器组 [db] 192.168.2.50 userdbadmin 192.168.2.51 port2200 # 混合组 [test] 10.0.0.5 usertest全局参数参数缩写说明默认值–concurrency-c并发连接数客户端同时连接服务端的数量50–debug-v开启调试模式false–no-history-本次执行不记录执行历史false–inventory-i指定主机清单文件优先于配置文件“”–timeout-t单台执行超时秒数0不限制超时主机标记失败不拖垮整批0–retry-file-将失败主机写入文件便于 --limit file 重跑“”–limit-从文件读取目标主机列表file常用于对失败主机重跑“”–output-o输出格式text人类阅读/ JSON结构化适合脚本和 AI Agenttext–dry-run-干跑模式只显示将要执行的命令和目标主机不实际执行安全预览false–version-V显示版本信息false–help-h查看帮助信息-退出码退出码含义处理建议0全部成功—1部分失败模块执行失败查看 stderr 判断原因2参数/配置错误修正命令或配置3连接失败检查目标机网络/sshd4超时增大 --timeout 后重跑5认证失败检查 SSH 凭据6程序内部错误上报 bug模板变量shell / script 模块命令中可使用模板变量fastdp 会在执行前替换为当前主机的实际值变量说明示例{{.addr}}host 文件原值IP 或域名zpf或192.168.1.10{{.ip}}实际 IP 地址域名自动 DNS 解析192.168.1.10{{.port}}SSH 端口22{{.user}}SSH 用户root# 替代复杂的 shell IP 解析直接写入 /etc/hostsfastdp shell-aecho {{.ip}} $(hostname)all-q/etc/hosts# 脚本内也可使用模板变量fastdp script-finit.sh--args{{.ip}}all主机区间展开所有模块通用目标主机/组参数支持[start:end:step]区间表达式shell/copy/fetch/script/ping/check 均可用fastdp shell-auptimenode-[100:105]# → node-100 ~ node-105fastdp copy-sa.conf-d/tmp/node-[100:102]引号说明[...]是 shell 的 glob 语法必须加引号——bash 下若当前目录恰好有同名文件会被静默替换成错误值zsh 下直接报no matches found。host 文件中使用则无需引号。区间展开的详细语法步长、零填充、参数覆盖见host模板文件注释与主机组配置章节。注意事项主机组配置主机地址支持 IP 或域名若未指定 password默认使用 SSH 密钥认证优先读取 ~/.ssh/id_rsa、id_ed25519、id_ecdsa、id_dsa文件复制远程目标路径-d必须为绝对路径支持保留源文件权限自动同步源文件权限到远程文件自动 MD5 校验文件相同则跳过传输文件拉取远程路径含*?等通配符时必须用引号包裹默认按 IP 创建子目录--no-ip-dir可改为 IP_文件名 模式远程脚本仅支持纯文本脚本最大 512KB禁止上传二进制文件非 .sh 后缀的文件会发出警告但不阻止执行错误排查开启调试模式-v可查看详细的 SSH 连接日志和命令执行过程若主机连接失败检查 SSH 端口、认证方式及网络连通性使用--retry-file记录失败主机再用--limit file只对失败主机重跑退出码0全部成功、1部分失败、2参数错误、3连接失败、4超时、5认证失败、6内部错误脚本和 AI Agent 可根据退出码决定重试策略check 模块巡检脚本路径~/.fastdp/fastdp-check.sh/etc/fastdp/fastdp-check.sh可自行编辑脚本内容输出keyvalue格式即可自动识别权限说明方式一系统级安装仅限 root 用户执行安装和普通用户无关方式二用户级安装无需 root所有文件位于家目录互不干扰巡检脚本中hw_time硬件时间需要 root 权限才能读取普通用户执行时该字段为空属正常现象普通用户如需完整巡检结果可通过sudo hwclock -r单独获取硬件时间帮助与反馈查看命令帮助fastdp --help或fastdp [模块名] --help提交 issueGitee | GitHub