Cloud Agent Cleaner:一键清理云服务器预装 Agent,支持阿里云/腾讯云/AWS 等

文件

Linux · Open Source · Cloud Server

Cloud Agent Cleaner:一键检测并清理云服务器预装 Agent

一套面向 Linux 云服务器的开源清理工具,可自动识别阿里云、腾讯云、AWS、Oracle Cloud、Microsoft Azure 与 Google Cloud 常见预装 Agent,显示删除影响、保护关键 Guest Agent,并在执行后再次检查残留。

当前版本 2.0.1-alpha.1 Python 3.8+ MIT License 六大云平台
01 · Background

为什么做 Cloud Agent Cleaner?

很多云服务器创建完成后,系统里会预装远程运维、主机监控、安全防护、自动化执行等组件。 对于需要这些能力的用户,它们很方便;但如果你已经有自己的监控、安全、运维体系,或者希望减少后台常驻进程, 就可能希望把不需要的可选组件卸载掉。

真正麻烦的地方不是“删一个目录”,而是不同云厂商、不同系统镜像、不同历史版本的安装方式并不完全相同。 有的通过 systemd,有的通过软件包,有的还有厂商自己的卸载脚本;部分 Agent 卸载后还可能留下服务文件、静态目录或缓存。

这个项目的目标不是暴力删除。 它先检测,再解释影响,再等待确认;执行完成后还会再次检查进程、服务、软件包和已知目录是否仍然存在。
02 · Support Matrix

目前支持哪些云平台?

云平台 当前识别/处理的组件 典型用途
阿里云云助手、云监控、云安全中心 Aegis远程命令、Guest OS 监控、安全防护
腾讯云TAT、BaradAgent/Sgagent、YunJing自动化执行、监控、安全防护
AWSSSM、CloudWatch、CodeDeploy、Inspector Classic远程管理、监控、部署、安全检查
Oracle CloudCloud Agent、Management Agent、Workload ProtectionOCI 管理插件、监控、安全能力
Microsoft AzureLinux Agent、Azure Monitor AgentVM 管理、扩展、监控
Google CloudGuest Agent、Ops AgentGuest 环境、监控与日志
关键 Guest Agent 默认保护: oracle.cloud-agentazure.linux-agentgcp.guest-agent 在一键模式中只会提示,不会删除。

cloud-initqemu-guest-agent、VirtIO、ENA、NVMe 驱动以及脚本无法确认身份的未知软件也不会被处理。

03 · Quick Start

一键使用

SSH 登录 Linux 服务器后执行:

GitHub 一键运行
curl -fsSLo /tmp/cloud-agent-cleaner.sh https://raw.githubusercontent.com/nljie1103/cloud-agent-cleaner/main/quick-run.sh && sudo bash /tmp/cloud-agent-cleaner.sh

程序首先只做检测,会把结果按组件列出来,例如:

aliyun.assistant   DETECTED
aliyun.monitor     DETECTED
aliyun.security    DETECTED

确认清除以上可选组件?输入 y 继续 [y/N]:

只有输入 y 后才会真正清理检测到的可选组件。执行前会保存一份本机检测清单,完成后再次做残留验证。

生产服务器先做快照。 同时保留 VNC、串口控制台或其他独立救援入口,避免因为误删自己仍然依赖的管理组件而失去远程处理能力。
04 · GitHub Connectivity

服务器访问不了 GitHub 怎么办?

当前一键入口本身来自 raw.githubusercontent.com,随后 quick-run.sh 还会从 GitHub 下载项目的 main.tar.gz。因此只要服务器到 GitHub Raw 或 GitHub 主站其中一段连接失败, 一键命令就可能无法完成。

不建议为了省事随便找第三方 GitHub 代理执行 root 脚本。 这个工具最终以 root 权限运行,第三方代理如果返回了被修改的内容,风险远高于普通文件下载。

方案 A:在自己电脑下载,再上传服务器

这是 GitHub 无法直连时最稳妥的方式。先在能够正常访问 GitHub 的电脑打开项目主页,下载仓库 ZIP,解压后把整个项目目录上传到服务器。

  1. 电脑端下载项目:在 GitHub 项目页面选择 Code → Download ZIP
  2. 上传到服务器:可以使用 SFTP、FinalShell、WinSCP、Termius、scp 等你已经在使用的文件传输方式。
  3. 进入目录执行:
    本地上传后运行
    cd cloud-agent-cleaner-main
    sudo python3 cloud_agent_cleaner.py --quick

方案 B:自己搭建可信镜像

如果你有很多国内服务器,建议把项目压缩包同步到自己控制的对象存储、网站或 CDN。 服务器从你自己的域名下载,再核对 SHA-256 后运行。这样既解决 GitHub 连通性,又不需要把 root 权限交给陌生代理。

自建镜像示例
curl -fL "https://你的可信域名/cloud-agent-cleaner-main.tar.gz" -o /tmp/cloud-agent-cleaner.tar.gz
sha256sum /tmp/cloud-agent-cleaner.tar.gz
mkdir -p /tmp/cloud-agent-cleaner
tar -xzf /tmp/cloud-agent-cleaner.tar.gz -C /tmp/cloud-agent-cleaner
cd /tmp/cloud-agent-cleaner/cloud-agent-cleaner-main
sudo python3 cloud_agent_cleaner.py --quick

上面的 SHA-256 必须与你发布镜像时记录的值一致。不要为了“能下载”就跳过完整性校验。

方案 C:只检测,不执行卸载

如果已经把项目上传到服务器,但暂时只想看看装了什么:

仅审计
python3 cloud_agent_cleaner.py --audit
05 · Workflow

脚本实际会做什么?

01

识别云环境

读取系统 DMI 等信息,给出当前主机可能属于阿里云、腾讯云、AWS、OCI、Azure 或 GCP 的提示。

02

多证据检测

结合目录、软件包、systemd unit 和实际运行进程判断 Agent 是否存在,而不是只看一个文件名。

03

展示影响

清理前明确提示这个 Agent 对控制台命令、Guest OS 监控、安全防护等能力可能产生的影响。

04

保护核心组件

OCI、Azure、GCP 的部分核心 Guest Agent 默认不进入一键删除范围,降低误操作风险。

05

执行厂商卸载

能使用官方卸载方式时优先使用官方方式;下载厂商脚本时记录 HTTPS 来源与 SHA-256。

06

再次验证残留

卸载完成后重新检查进程、服务和目录;发现残留不会直接假装成功,而是继续提示。

06 · Alibaba Cloud Test

阿里云 ECS 实机测试中遇到的几个真实情况

这个项目不是只按文档“猜”路径,我在多台阿里云 ECS 上实际测试过不同镜像状态,遇到过几种很典型的情况。

CASE 01

云助手 + 云监控 + 云安全中心全部存在

脚本可以同时识别三套组件。云监控除了 /usr/local/cloudmonitor,还能检测运行进程和 cloudmonitor.service

CASE 02

云监控程序已经卸载,但 systemd unit 还在

实测出现过程序目录和进程都已经消失,只剩 cloudmonitor.service 的情况。当前版本会继续清理确认属于 CloudMonitor 的 unit 残留,再重新执行 systemd 验证。

CASE 03

Aegis 客户端已经离线,但目录还剩一百多 MB

阿里云官方卸载脚本执行完成后,某些机器仍可能留下 /usr/local/aegis 静态文件。当前版本会先确认 Aegis 服务和进程已经停止,再精确删除这个目录。

CASE 04

官方 Aegis 卸载脚本失败

实机遇到过官方卸载脚本非 0 退出、Aegis 进程仍然存活的情况。新版会显示错误摘要,并仅针对明确属于 Aegis 或可执行路径位于 /usr/local/aegis/ 的进程做本地兜底;确认停止后才清理目录。

阿里云安全中心特别提醒: 清理 Aegis 前先在云安全中心控制台关闭“客户端自保护”和“恶意主机行为防御”。 如果自保护仍然生效,本地进程可能无法正常退出。
07 · Safety

这个脚本刻意不做什么?

  • 不会看到“像云软件的名字”就直接批量 rm -rf
  • 不会默认删除 OCI、Azure、GCP 的关键 Guest Agent。
  • 不会删除 cloud-initqemu-guest-agent 和虚拟化/存储/网卡驱动。
  • 不会把“目录存在”等同于“进程正在运行”。
  • 不会因为官方卸载脚本报错就假装已经卸载成功。
  • 不会使用类似 /usr/local/aegis* 这种过宽的通配符清理。

需要说明的是:删除 Guest OS 内的 Agent,并不意味着云厂商失去了对宿主机、VPC、云盘、实例控制面或基础监控的管理能力。 这个工具处理的是你虚拟机操作系统内部可以识别到的 Agent。

08 · Verification

如何判断是否清理成功?

最理想的最终输出类似:

Post-action verification
[OK] aliyun.assistant: not detected.
[OK] aliyun.monitor: not detected.
[OK] aliyun.security: not detected.
[OK] Completed with 0 warning(s).

如果看到 residuals detectedstill has active service/process evidenceuninstall incomplete,说明脚本检测到了残留,不应把这次操作当成成功。

想再次确认,可以重新运行同一条一键命令。已经清理干净的组件应该显示:

aliyun.assistant   not-found
aliyun.monitor     not-found
aliyun.security    not-found
09 · FAQ

常见问题

卸载云监控后,为什么控制台还可能看到 CPU 和网络流量?

云厂商的一部分基础指标可以在宿主机或虚拟化层采集,并不一定依赖虚拟机内部的 Guest Agent。因此“控制台还有基础监控曲线”和“操作系统里的监控 Agent 已经卸载”并不冲突。

为什么不直接复制网上那些 pkill + rm -rf 教程?

很多旧教程针对的是数年前的固定版本,而且命令范围较宽。这个项目更强调先识别真实进程与确定路径,尽量避免把名称相近但不属于目标 Agent 的文件或进程一起删除。

GitHub 连不上,可以直接使用网上的 GitHub 加速站吗?

技术上可能可以,但不推荐直接通过未知代理下载并以 root 权限执行脚本。更稳妥的做法是电脑端下载后上传,或者由你自己维护可信镜像并核对 SHA-256。

执行后还能重新安装这些 Agent 吗?

多数云厂商都提供重新安装方式,但不同平台、不同 Agent 的恢复方法并不相同。如果未来仍需要控制台远程命令、安全中心、Guest OS 监控等能力,应按对应云厂商的官方文档重新安装。

脚本会不会自动删除所有云厂商组件?

不会。一键模式只处理识别到的可选组件;关键 Guest Agent 默认保护,未知组件也不会猜测性删除。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享