Agent 与 SSH 登录记录
Zenavo agent
初始化会在每台服务器上安装 Zenavo agent,运行在它自己的 zenavo-system 命名空间中。Agent 通过 HTTPS 主动向外连接控制面,把控制面的 Kubernetes 请求转交给本地集群:部署、日志、终端、文件和状态检查。因为连接是从服务器向外发起的,所以不需要为 Zenavo 开放任何端口,Zenavo 也不保存集群的任何凭据。Agent 能做什么、不能做什么,见防火墙与安全。
服务器的 服务器信息 标签页显示 agent 是否已连接,连接线路 显示它是直接连接控制面,还是经过 Zenavo 的某个中继。agent 停止响应几分钟后,服务器会显示 离线;上面的项目会继续运行(管理服务器)。
更新 agent
设置 中显示 agent 的版本。有新版本时,团队管理员点击 更新 agent。Agent 会把自己更新到 Zenavo 的 agent 镜像(固定到 digest),不需要 SSH 或重新初始化。新的 agent 连接上之前,当前的 agent 会继续运行,所以不会有任何中断。如果更新没有完成,设置中会提示,并链接到任务日志。
服务器处于运行状态、并且上面没有其他任务在执行时,才能开始更新。
在 agent 之前添加的服务器
在 agent 出现之前添加的服务器会自动迁移到 agent。设置 → 连接方式 显示迁移状态,也可以立即开始迁移(在 agent 之前添加的服务器)。需要 agent 的功能(例如 SSH 登录记录)会在迁移后开始工作。
SSH 登录记录
服务器的 SSH 标签页列出谁通过 SSH 登录过这台服务器,团队成员及以上可以查看:
- 来源 IP:每个登录过的地址,以及它的国家和城市、使用的用户和方式(密码或密钥)、成功登录次数和失败尝试次数,以及首次和最近一次出现的时间。在所选时间段内新出现的地址会标记为 新。
- 时间范围:最近 24 小时、7 天、30 天或 90 天。
- 包含失败的登录尝试:默认关闭,列表只显示登录成功过的地址。开启后还会显示只有失败尝试的地址,这些大多是全网范围的密码扫描。
当某个地址第一次成功登录团队的服务器时,Zenavo 会发邮件通知团队:即 新的 SSH 登录来源 通知。如果你刚从新的网络连接过,这是正常的;否则是一个警告信号。Zenavo 第一次看到时已经超过一天的登录(例如控制面曾经中断),不会发送告警。
收集方式
Agent 不以 root 运行,无法读取服务器的日志,所以初始化会安装一个可以读取日志的小型收集器。一个 systemd 定时器每五分钟以 root 身份运行它。它只读取 journal 中新增的 sshd 记录,按来源 IP、用户和方式保存最近七天的每小时汇总,放在一个只有 agent 所在用户组可以读取的目录中。Agent 永远看不到原始日志,收集器本身没有网络访问,也不发送任何内容。
控制面每隔几分钟通过 agent 复制这些汇总,并保留 90 天。地址的位置用离线的城市数据库查询,从不发送给其他服务。一次连接只计一次:被接受就算一次登录,否则算一次失败尝试。不是普通名称的用户名记为 ?。
如果标签页提示还没有上报,说明这台服务器是在登录记录功能推出之前初始化的:设置 → 运行初始化 会安装收集器。没有通过 agent 访问的服务器,在迁移到 agent 之前不会显示记录。
API
| 方法 | 路径 | |
|---|---|---|
GET | /api/servers/{sid}/ssh-logins?hours=&failed= | 登录记录(成员):hours 为 24、168、720 或 2160(默认 168);failed=1 时还会列出只有失败尝试的地址。返回收集器的状态(active、waiting 或 unsupported)、汇总以及每个来源 IP 一行 |
POST | /api/servers/{sid}/agent/update | 把 agent 更新到当前镜像(管理员;返回一个任务) |
POST | /api/servers/{sid}/agent | 立即把在 agent 之前添加的服务器迁移到 agent(管理员;返回 202 和服务器,迁移以任务的形式运行) |