跳板机的定位与多级跳转
生产环境通常不允许从办公网直连业务主机,而是先登录一台受控的跳板机或堡垒机,再由它转接到目标。多级跳转就是在用户与目标之间插入一层或数层中转,好处是集中认证、集中审计、收敛可达范围;代价是每一跳都要单独处理认证、主机密钥校验与超时,链路越长,出现「中间某跳没通但报错指向最后一跳」的概率越高。
基本信息
| 适用对象 | OpenSSH 客户端与堡垒机、跳板机架构 |
|---|---|
| 常见方式 | 跳转主机参数、代理命令、端口转发、可视化网关 |
| 认证要点 | 每一跳各自独立认证,不做隐式传递 |
| 校验要点 | 每一跳的主机密钥都要校验,跳板机不能代替目标机 |
| 审计要点 | 跳板机侧通常记录会话,敏感操作需保留可追溯记录 |
四种常见跳转方式
- 跳转主机参数:在一行里指定一层或多层中转,写法最简洁,适合临时使用
- 代理命令:把连接过程交给外部程序处理,适合需要特殊拨号或代理的场景
- 本地端口转发:在本机开监听转发到目标,适合图形工具与数据库客户端接入
- 动态转发:在本机提供代理端口,按需访问多个目标,适合多目标排查但不便审计
- 常用配置固化:把跳转规则写进客户端配置按别名调用,避免每次手拼参数导致误连
多跳连接写法
多跳连接写法
ssh -J user@jump1,user@jump2 user@target # 两级跳转,逐跳认证
ssh -o ProxyCommand='ssh -W %h:%p user@jump' user@target # 用标准输入转发替代
ssh -L 15432:db.internal:5432 user@jump # 本地端口转发,供数据库客户端使用
ssh -D 1080 user@jump # 动态转发,本机获得代理端口
ssh -vvv -J user@jump user@target 2>&1 | tail -40 # 逐跳查看卡在哪一层
ssh -o ConnectTimeout=8 -J user@jump user@target # 缩短超时,快速区分哪跳不通把跳转写进客户端配置
把跳转写进客户端配置
# 按别名调用,避免每次手拼参数
Host prod-db
HostName db.internal
User opsuser
ProxyJump jump1.example.com
ConnectTimeout 8
ServerAliveInterval 30跳转方式的取舍
| 方式 | 适合场景 | 主要代价 |
|---|---|---|
| 跳转主机参数 | 临时多跳、脚本内调用 | 每跳都要可用,链路长时排错难 |
| 代理命令 | 需要特殊拨号或外部程序 | 写法复杂,依赖外部程序可用性 |
| 本地端口转发 | 图形工具与数据库接入 | 本机监听需防误暴露,端口易冲突 |
| 动态转发 | 多目标临时排查 | 行为宽泛,审计与限权困难 |
多跳连接的主机密钥校验是逐跳进行的:第一次连接时客户端会分别记住每一跳的指纹。中途替换跳板机或目标机后若出现指纹冲突提示,应先确认是不是预期的设备变更,再决定更新记录。
跳板机上不要保存业务主机的长期私钥:一旦跳板机被入侵,等于交出全部目标。更稳的做法是让认证经由集中身份源与短期凭据完成,跳板机只承担通道与审计职责。具体实现随所选产品或身份方案不同,以官方文档为准。