跳板机访问的标准做法
访问内网主机只经过跳板时,用 ssh -J 或 ~/.ssh/config 里的 ProxyJump 一条命令直达,不必先登录跳板再手动登录目标。scp 与 rsync 也能复用同一套配置(rsync 通过 -e 传入 ssh 参数)。同时要清楚 Agent 转发的安全边界:-A 等于把本机的 SSH 代理能力借给远端,跳板机上权限较高的账号可以借你的身份访问其他机器。
基本信息
| 适用平台 | OpenSSH(ProxyJump 需要 7.3 及以上) |
|---|---|
| 核心写法 | ssh -J、scp -o ProxyJump、rsync -e 'ssh -J ...' |
| 配置固化 | ~/.ssh/config 里 Host 别名 + ProxyJump |
| 多级跳板 | ProxyJump a,b(逗号分隔,不要嵌套 ssh 命令) |
| 安全相关 | ForwardAgent、StrictHostKeyChecking、跳板机审计 |
典型使用场景
- 运维内网数据库与应用服务器(无公网直连)
- 发布脚本经跳板推送构建产物
- 本地开发连接内网服务(配合端口转发)
- 多级隔离环境:办公网到跳板再到生产网
- 临时排障快速建立通道而不改网络策略
常用写法
常用写法
ssh -J bastion ops@10.0.0.9 'hostname' # 单命令跳板执行,不落跳板 shell
ssh -J a,b ops@10.0.0.9 # 多级跳板:逗号分隔
scp -o ProxyJump=bastion file ops@10.0.0.9:/tmp/
rsync -av -e 'ssh -J bastion' ./dist/ ops@10.0.0.9:/data/dist/
ssh -J bastion -L 13306:db.internal:3306 ops@10.0.0.9 # 经跳板做端口转发
# 固化到 ~/.ssh/config:
# Host db
# HostName 10.0.0.9
# User ops
# ProxyJump bastion
ssh db 'systemctl is-active mysql' # 配置写好后直接用别名
ssh -J bastion -v ops@10.0.0.9 # 连不上时用 -v 看每一跳的握手细节常用写法对照
| 场景 | 写法 | 注意 |
|---|---|---|
| 单级跳板 | ssh -J bastion user@host | 不会落在跳板机的交互 shell 上,最干净 |
| 多级跳板 | -J a,b | 逗号分隔;嵌套 ssh 命令容易陷入引号问题 |
| scp 复用 | -o ProxyJump=bastion | scp 直接支持该参数 |
| rsync 复用 | -e 'ssh -J bastion' | -e 后面的引号由本地 shell 处理,别拆散参数 |
| 配置固化 | ~/.ssh/config 的 Host 别名 | 团队统一模板后维护成本最低 |
| 端口转发 | -L 本地端口:目标:目标端口 | 转发链路仍经跳板,审计与权限遵循跳板策略 |
ForwardAgent(或命令行 -A)等于把本机的 SSH 代理能力开放给远端:跳板机上的高权限账号可以借你的身份访问其他机器。除非确有需要,不要开启。
内网主机的指纹校验实际发生在跳板机上:known_hosts 冲突提示要去跳板机(对应账号的家目录)处理,而不是在本地清理。
团队协作时把 ~/.ssh/config 模板纳入仓库统一分发:别名、跳板与端口转发一次配好,新人上手不用问;同时保留跳板机的审计与命令记录,便于事后追溯操作。