YAOTU INSIGHTS

在 DigitalOcean Droplet 上接入 Fleet 实例:从零注册云服务器为受管主机

在 DigitalOcean Droplet 上接入 Fleet 实例:从零注册云服务器为受管主机
在 DigitalOcean Droplet 上接入 Fleet 实例从零注册云服务器为受管主机【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet本文是一份端到端实战指南把一台运行 Ubuntu 的 DigitalOcean Droplet 云服务器通过 Fleet 官方的fleetctl命令行工具生成安装包、部署 osquery 代理fleetd最终接入你自己的 Fleet 实例并立即开始跑查询。你将掌握fleetctl package的核心参数、deb 安装包背后的服务化机制以及如何验证主机上线并执行第一条 osquery 查询。场景与前置条件假设你有一台 DigitalOcean 上创建的 Ubuntu Droplet 服务器希望在它上面部署 osquery 代理并把它作为一台受管主机接入现有的 Fleet 实例。这正是 Fleet 典型的 Linux 服务器纳管场景云服务器同样可以通过 fleetd 代理获得主机清单、策略检查与实时查询能力。开始之前请确认满足以下前提你拥有一台 Ubuntu Server 的 DigitalOcean Droplet若尚未创建可先在 DigitalOcean 控制台完成创建。你已为 Droplet 启用 SSH 访问并将自己笔记本的 SSH 公钥添加到该 Droplet从而可以免密或密钥登录。整个流程共分五步SSH 登录 Droplet → 获取 fleetctl 命令行工具 → 用 fleetctl 生成 deb 安装包 → 安装并自动启动代理 → 回到 Fleet 实例验证上线。第一步SSH 登录 Droplet在终端中以root用户 SSH 登录你的 Dropletssh rootYOUR_DROPLET_IP将YOUR_DROPLET_IP替换为 Droplet 的实际公网 IPDroplet 创建后可在 DigitalOcean 控制台看到。登录成功后你就进入了 Droplet 的终端接下来所有操作都在这台服务器上完成。第二步下载并安装 fleetctl 命令行工具fleetctl是 Fleet 的官方 CLI 工具它的职责之一是本地生成面向不同操作系统的 fleetd 安装包。在 Droplet 上使用 wget 下载 Linux 版二进制压缩包wget https://github.com/fleetdm/fleet/releases/download/fleet-v4.14.0/fleetctl_v4.14.0_linux.tar.gz注意将 URL 中的v4.14.0替换为当前最新的 fleetctl 版本号。下载完成后可用ls确认压缩包已就位。解压归档并进入解压出的目录tar xzvf fleetctl_v4.14.0_linux.tar.gz cd fleetctl_v4.14.0_linux/解压目录名同样随版本号变化请以实际解压结果为准。目录内就是一个可直接执行的fleetctl二进制。把它移动到用户根目录并返回mv fleetctl ~/ cd ~此时ls可以看到fleetctl二进制、解压目录和压缩包三个条目。解压目录和压缩包已经不再需要可以清理掉rm -rf fleetctl_v4.14.0_linux/ fleetctl_v4.14.0_linux.tar.gz最后执行版本检查确认工具可正常运行./fleetctl --version输出应包含Fleetctl版本号、git 修订、构建日期以及 Go 版本等信息。只要版本信息正常打印说明 fleetctl 已就绪可以进入下一步生成安装包。第三步用 fleetctl 生成 osquery 安装包fleetctl 的核心能力之一就是package子命令它可以一次性生成完全引导完成的安装包把代理orbit、osqueryd 及其自动更新配置统统打进去覆盖 Windows、macOS 和 Linux 三大平台。在 Fleet 实例的界面上点击Add host按钮切换到Linux (deb)标签页会直接给出针对当前实例的完整命令形如./fleetctl package --typedeb --fleet-urlYOUR_FLEET_INSTANCE_URL --enroll-secretYOUR_ENROLL_SECRET_KEY把YOUR_FLEET_INSTANCE_URL换成你的 Fleet 实例地址YOUR_ENROLL_SECRET_KEY换成该实例或目标团队的 enroll secret执行后终端会提示生成成功package 命令的关键参数从源码看package命令的参数定义非常完整见 cmd/fleetctl/fleetctl/package.go。对本场景最关键的几个参数参数含义默认值/说明--type安装包类型必填取值deb、rpm、pkgmacOS、msiWindows、pkg.tar.zstArch Linux--fleet-urlFleet 服务器地址host:port必填与 enroll-secret 成对出现--enroll-secret向 Fleet 认证的注册密钥必填与 fleet-url 成对出现--arch目标 CPU 架构amd64可选arm64仅 deb/rpm/msi/pkg.tar.zst--fleet-certificateFleet 服务器证书链路径自签 HTTPS 证书场景下使用--insecure关闭 TLS 证书校验与--fleet-certificate互斥--service是否安装为持久化服务systemd 等默认true--disable-updates禁用代理自动更新默认开启自动更新--osqueryd-channel/--orbit-channel/--desktop-channel各组件更新通道默认stable--enable-scripts启用脚本执行能力需要时开启--fleet-desktop是否打包 Fleet Desktop 应用服务器场景通常不需要值得注意的校验逻辑同样来自 package.go--enroll-secret与--fleet-url必须同时提供只给一个会直接报错--insecure与--fleet-certificate不能同时使用在 Windows 上只能构建 MSI 包在非 Linux 上无法使用--native-tooling--arch只接受amd64或arm64。对于本场景只需要--typedeb、--fleet-url和--enroll-secret三个参数即可其余全部使用默认值。生成 deb 的底层实现命令执行后fleetctl 内部会调用packaging.BuildDeb见 orbit/pkg/packaging/deb.go通过 nfpm 组装 deb 包完整流程在 orbit/pkg/packaging/linux_shared.go 的buildNFPM中。打包过程实际完成的工作包括从 TUF 更新服务器拉取当前stable通道的 orbit 与 osqueryd 二进制作为包的运行时组件把注册密钥写入包内的secret.txt对应 packaging.go 中的writeSecret实现装完即已注册生成 systemd 服务单元orbit.serviceExecStart指向/opt/orbit/bin/orbit/orbit并默认施加CPUQuota20%的 CPU 配额生成环境文件/etc/default/orbit其中写入了ORBIT_FLEET_URL、ORBIT_ENROLL_SECRET、ORBIT_UPDATE_URL、各组件更新通道等运行时变量将certs.pemosquery 使用的证书链随包分发生成 postinst 脚本安装后自动systemctl daemon-reload、systemctl enable orbit.service并启动服务。这也解释了为什么安装包生成后会提示Success!并给出类似fleet-osquery_0.0.11_amd64.deb的文件名——包版本取自打包时 orbit 的最新版本文件名则遵循fleet-osquery_orbit版本_架构.deb的约定。第四步安装 deb 并自动接入 Fleet回到 Droplet 根目录用ls确认生成的 deb 文件然后通过 apt 安装sudo apt install ./fleet-osquery_0.0.11_amd64.deb文件名中的版本号请以实际生成结果为准。安装过程会触发 postinst 脚本注册并启动orbit.servicesystemd 服务orbit 随即读取/etc/default/orbit中的注册信息拉起 osqueryd 并向 Fleet 实例发起注册。整个过程无需手工启动任何进程。第五步在 Fleet 实例中验证主机上线刷新 Fleet 实例的Hosts页面你应该能看到这台 Droplet 出现在主机列表中状态为Online操作系统显示为 Ubuntu并带有所安装的 osquery 版本。注意此时主机名显示的是 Droplet 的 hostname而不是系统默认的初始名。验证与实战对 Droplet 执行第一条查询主机上线后就可以在 Fleet 实例中把这台 Droplet 作为目标运行 osquery 查询了。例如查询所有用户在 shell 中敲过的历史命令SELECT * FROM shell_history;该查询会返回 Droplet 上各用户 shell 历史记录中执行的命令结果可在 Fleet 的查询结果面板中直接查看。这条查询仅是起点——shell_history只是 osquery 上百张表之一你还可以继续查询进程、网络连接、软件清单、启动项等把云服务器纳入统一的可观测与合规检查体系。小结至此你已完成从 DigitalOcean Droplet 到 Fleet 实例的完整接入SSH 登录 → 获取 fleetctl → 生成 deb 安装包 → 安装并自动注册 → 验证上线并执行查询。整个过程不依赖手动配置文件注册密钥与实例地址都在打包阶段被固化进安装包装完即自动连接非常适合对云服务器进行批量、可复现的纳管。如果想进一步了解 fleetctl 的更多用法如为其他发行版或架构打包、关闭自动更新、配置自签证书等可查阅 cmd/fleetctl/fleetctl/package.go 中完整的参数定义以及 orbit/pkg/packaging/linux_shared.go 中 deb/rpm 包的构建与系统服务编排逻辑。【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考