用 AI Agent 做你的服务器安全管家
原理 + 实操 + 一次真实巡检
深信号·教程

别裸奔:让 AI 帮你守着服务器

公网服务器 24 小时被扫描爆破,一个人盯不过来。AI Agent(如 Hermes)正好能当安全管家:让它定期巡检、发现问题、给出修复建议,甚至自动封禁。本文讲原理、给命令,并附一次真实服务器巡检的完整过程和结论。

只读巡检发现问题给修复方案可定时自动跑

目录

① 安全管家能做什么 ② 巡检清单:查什么 ③ 巡检命令(拿来即用) ④ 实战:一次真实巡检结论 ⑤ 发现问题的修复方案 ⑥ 自动化:定时让管家巡逻
1

安全管家能做什么

把 Hermes 当成一个能 SSH 到服务器、能看懂日志的运维助手,它可以:

💡 原则:巡检默认只读,不自动改配置。AI 管家提建议、你拍板,避免它"好心办坏事"。
2

巡检清单:查什么

核心

一份合格的服务器安全巡检,至少覆盖 13 项:

类别检查项危险信号
暴露面开放端口(ss -tlnp)非 22/80/443 的端口直接 0.0.0.0 对公网
SSHPasswordAuthentication开着 = 可被密码爆破
PermitRootLoginyes = 黑客可直接试 root
账号有 shell 的用户出现不认识的用户
补丁apt 待升级数量几十上百个没更新
入侵痕迹SSH 失败登录日志频繁 Invalid user / Failed password
边界ufw / iptables防火墙 inactive / INPUT ACCEPT
权限敏感文件权限.env / key 文件不是 600
进程可疑进程不认识的常驻进程、挖矿进程
文件world-writable 文件/home /etc /opt 下有 777 文件
计划任务cron出现你从没加过的任务
sudosudoers NOPASSWD普通用户 NOPASSWD:ALL
服务健康systemd 状态服务 restarting 循环 = 有故障
3

巡检命令(拿来即用)

把下面这些写成脚本,SSH 到服务器跑一遍即可。也可以直接把整段丢给 Hermes,让它逐项解读。

# 1. 开放端口(看谁在公网裸奔)
ss -tlnp | grep -vE '127.0.0.1|::1'

# 2. SSH 安全配置
sudo sshd -T | grep -E 'passwordauthentication|permitrootlogin'

# 3. 有 shell 的用户
grep -E '/(bin/bash|bin/sh)$' /etc/passwd

# 4. 待升级补丁数
apt list --upgradable | grep -c upgradable

# 5. 近 7 天 SSH 爆破尝试
sudo journalctl -u ssh --since "7 days ago" | grep -c 'Failed password\|Invalid user'

# 6. 防火墙
sudo ufw status

# 7. 敏感文件权限(应都是 600)
ls -la ~/.hermes/.env ~/wechat-auto-publisher/config/config.yaml 2>/dev/null

# 8. 可疑进程(新近启动的)
ps aux --sort=-start_time | head -8

# 9. world-writable 文件
sudo find /home /etc /opt /usr/local -xdev -type f -perm -0002 2>/dev/null | head

# 10. sudo 免密范围
sudo grep -rE 'NOPASSWD' /etc/sudoers /etc/sudoers.d/ 2>/dev/null
4

实战:一次真实巡检结论

真实数据

下面是 2026-09-27 对一台阿里云 Ubuntu 24.04 服务器(公网环境,运行 166 天)的真实巡检结果。

✅ 做得好的:

  • SSH 已禁用密码登录(PasswordAuthentication no)✓
  • 已装无人值守安全更新(unattended-upgrades)✓
  • 敏感文件权限全部 600(.env / config.yaml / sensenova.env / 火山 key)✓
  • world-writable 文件仅 uv 缓存 lock(无害)✓

🔴 发现的安全隐患:

  • 端口 5007 对公网裸奔:某内部服务监听 0.0.0.0:5007,无鉴权,任何人可访问
  • 防火墙完全没开:ufw inactive,iptables INPUT 策略是 ACCEPT(全放行)
  • PermitRootLogin yes:允许 root 直接 SSH 登录
  • 无 SSH 白名单:没配 AllowUsers,任何用户可尝试
  • 87 个系统包待升级:含安全补丁
  • 7 天内 28 次 SSH 爆破尝试:来自 203.0.113.9 / 203.0.113.10 / 203.0.113.11 等(Invalid user 扫描)
  • admin 用户 NOPASSWD:ALL:sudo 免密范围过大(运维便利,但风险高)
  • agent-collab 服务 restarting 循环:服务异常重启

结论:整体基础不错(密钥登录 + 权限规范 + 自动更新),但防火墙未开 + 5007 端口裸奔 + root 可直连是三个必须处理的高危项——尤其 5007 等于给公网开了个无鉴权入口。

5

发现问题的修复方案

行动

按优先级给出修复命令(改前备份、逐条确认):

① 开防火墙,只放行必要端口(最优先):

💡 确认时看 ufw status 的 v6 列也放行了(22/80/443 的 IPv6 规则是命令自动生成的,但要确认没被手动挡掉)。
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status   # 确认 active

② 5007 端口要么关要么上 Nginx + 鉴权:

# 方案A:如果 某内部服务 不需要公网访问,改成只听 127.0.0.1
# 方案B:需要公网 → 关掉 5007 直连,改走 Nginx 反代 + 访问控制
💡 改绑后必须验证反代没被改挂:curl 本机应用(curl http://127.0.0.1:5007/api/)+ 通过 nginx 域名各测一次(curl https://你的域名/应用路径/),都通才算完成。
⚠ 改 SSH 配置前先留后门:开一个新 SSH 窗口保持登录,再改下面的配置并重启 sshd——万一改错(禁 root + 白名单 + 关密码三连),你还有旧窗口能救回来。改完先开新连接测试能进,再关旧窗口。

③ 禁止 root 直连 SSH:

sudo sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart ssh

④ 加 SSH 白名单(只允许自己):

echo 'AllowUsers admin' | sudo tee -a /etc/ssh/sshd_config
sudo systemctl restart ssh

⑤ 更新系统补丁:

sudo apt update && sudo apt upgrade -y

⑥ 收窄 sudo 免密(只放行必需命令):

⚠ 关键坑:光在 sudoers.d 加收窄规则没用。sudo 是首个匹配生效——只要主 /etc/sudoers 里还有 admin ALL=(ALL) NOPASSWD:ALL,它会被最先匹配,sudoers.d 里的规则永远轮不到(实测:文件加了、行为没变)。正确做法:sudo visudo 删掉主文件那行,只在 sudoers.d 留精确白名单,删完用 sudo -n 白名单命令 验证免密、sudo -n 其他命令 验证要密码。
# 把 NOPASSWD:ALL 改为只允许特定命令,如:
admin ALL=(ALL) NOPASSWD: /bin/systemctl restart onethingaday.service

⑦ 修 agent-collab 服务循环:journalctl -u agent-collab -n 20 看报错修复,或停掉。

6

自动化:定时让管家巡逻

闭环

让 Hermes 每周自动巡检一次,报告推到微信/QQ:

hermes cron create "every monday 9am" --prompt "
SSH 到我的服务器,做一次完整安全巡检
(开放端口/SSH 配置/用户/补丁/爆破日志/防火墙/权限),
把发现的问题按优先级列出并给修复命令,推送到微信"

之后每周一早上 9 点,管家自动巡逻并汇报。你只需要偶尔点开报告,决定改不改。

💡 更稳的做法:把巡检脚本(第 3 节那 10 条命令)存成 audit.sh 放服务器,cron 调它,输出解析后汇报。脚本只读、幂等、安全。
本文包含服务器巡检示例数据(2026-09-27)· 由知微编写