问题背景
公司内网部署了一台 JumpServer 堡垒机,所有运维人员通过该堡垒机 SSH 跳转到生产服务器。堡垒机配置了完整的会话审计(录像 + 日志),日均登录次数约 200 次。
故障现象
下午 3:10,线上 Redis 集群发生主从切换异常,需要紧急登录服务器切换 VIP。运维人员通过堡垒机 SSH 登录目标服务器时,发现从输入 ssh 命令到出现密码提示,卡顿了 30 秒以上,登录过程极度缓慢。多位运维人员同时遇到相同问题,严重拖慢了故障处理进度。
登录行为在 putty 的表现:Connecting to 10.x.x.x... 长时间停留在该状态,且无任何超时报错。
排查过程
第一步:网络连通性检查
首先排查是否是网络问题:
|
|
网络层面一切正常,问题锁定在堡垒机本身或 SSH 服务端。
第二步:堡垒机资源检查
|
|
堡垒机本身资源非常充裕,不是性能瓶颈。
第三步:SSH 客户端详细调试
使用 ssh -vvv 查看详细交互过程:
|
|
卡顿发生在认证成功后、进入交互会话之前——此时 SSH 守护进程会做两件事:更新登录日志(wtmp/lastlog)和PAM 会话模块初始化。
第四步:wtmp 锁定
|
|
/var 分区 100% 占满。进一步排查:
|
|
堡垒机的会话审计录像日志堆积了超过 15GB,而 /var/log/wtmp 也受分区满载影响无法写入:
|
|
pam_lastlog.so 在尝试写入 wtmp 时阻塞,导致 SSH 会话建立被严重拖慢。
解决方案
- 紧急处理:
|
|
重启 sshd 后,登录速度恢复正常(<2秒)。
- 清理旧审计日志:
|
|
- 配置日志轮转:创建
/etc/logrotate.d/jumpserver并配置按天轮转、保留 30 天。
根因分析
直接原因:JumpServer 的会话审计录像日志未做轮转和清理,占满 /var 分区,导致 pam_lastlog.so 在尝试更新 wtmp 时长时间阻塞。
深层原因:堡垒机初始部署时未规划日志分区隔离——/var 分区与系统盘共享 20GB 空间,且未配置任何 logrotate 策略。对于每天产生数百 MB 审计录像的堡垒机来说,20GB 很快就会被耗尽。
预防措施
- 磁盘分区隔离:堡垒机单独挂载一块大容量磁盘用于审计日志存储
- 配置 logrotate:审计日志按天轮转,保留 30 天,超过后自动删除
- 磁盘容量监控:
/var分区使用率 >80% 时触发告警 - pam_lastlog 优化:将
silent参数添加到pam_lastlog.so行,避免因 wtmp 写入失败阻塞登录 - 定期巡检:每月检查堡垒机的磁盘和日志状态
总结
堡垒机作为运维入口,其稳定性直接关系到故障应急效率。/var 分区满了看似是小问题,但在 SSH 登录这种场景下会被放大为严重的业务影响。任何时候,关键基础设施的磁盘分区和日志轮转都应该在部署时做好规划,而不是等到故障爆发再救火。