SSH多级跳转须用ProxyJump实现安全链式连接,每台跳板机强制启用script审计日志、分层密钥隔离,并集中归集加密日志保留90天以上。

用SSH跳板机做多级跳跃访问,核心是把“连得上”和“管得住”两件事一起解决。不是单纯配通连接,而是让每一次登录、每一条命令、每一个文件传输都可追溯、可控制、可回放。
一、多级跳转必须用 ProxyJump(非 ProxyCommand)
OpenSSH 7.3+ 原生支持 ProxyJump,这是实现安全多跳的底层前提。它自动建立链式加密通道,本地只与第一层跳板机直连,中间跳转全部在服务端完成——这意味着:
- 本地不暴露中间跳板机的IP或密钥,攻击面更小
- scp、rsync、sftp 全部原生兼容,不用改脚本
- 会话日志统一由第一层跳板机记录起点,审计线索不断链
错误做法:用 ssh -o ProxyCommand="ssh -W %h:%p jump1" user@jump2。这种写法会让本地客户端直接参与每一跳,中间跳板机的连接行为无法被首层跳板机捕获,审计日志缺失关键环节。
二、所有跳板机必须启用强制审计日志
光连通不够,操作必须留痕。在每台跳板机(包括最外层和中间层)的 /etc/ssh/sshd_config 中,至少启用以下三项:
-
ForceCommand /usr/bin/script -qf -e -c "/bin/bash" /var/log/ssh/session-$(date +\%Y\%m\%d)-$USER-$$:强制记录完整终端会话(含键盘输入和屏幕输出) -
LogLevel VERBOSE:记录登录用户、源IP、认证方式、连接时长等元数据 -
PermitTunnel yes+ 配合auditd监控/dev/pts/*设备读写:防绕过 script 记录的隐蔽操作
注意:日志路径建议用时间+用户名命名,避免混杂;日志文件权限设为 600,归属 root:adm,防止普通用户删改。
三、密钥与权限必须分层隔离
不能用同一对密钥贯穿所有层级。正确做法是“逐层签发”:
- 用户本地只持有访问第一层跳板机(如
jump1.example.com)的私钥 - 第一层跳板机上,为每个授权用户生成专属密钥对,仅用于访问第二层(如
jump2),私钥存于/home/jumpuser/.ssh/jump2_key,权限600 - 第二层跳板机同理,为下一层或目标服务器生成密钥,且不向上反向暴露
这样设计后,即使某台跳板机被攻破,攻击者也无法直接拿到通往更深层的密钥,横向移动被硬性阻断。
四、审计日志要集中归集并保留90天以上
单机日志容易被删,必须实时同步到独立审计服务器:
- 用
rsyslog或journalctl --follow将auth.log和自定义会话日志推送到 SIEM 系统(如 ELK 或 Graylog) - 每条日志需包含:本地用户、跳板机IP、目标服务器IP、登录时间、退出时间、命令摘要(前128字符)、会话录像文件名
- 录像文件本身加密存储(如用
gpg对称加密),密钥由审计系统统一管理,运维人员无权解密原始录像
金融、政务类场景要求日志保留不少于180天,互联网企业建议不低于90天——这是事后追责和合规检查的基本底线。

















