proxyjump 实现跨多重物理隔离网的安全穿透,核心是逐层预授权加密转发而非绕过隔离;需确保各跳网络连通、openssh≥7.3、密钥逐级部署且权限严格(600)、通过 ~/.ssh/config 定义跳转链,支持 ssh/scp/端口转发等全功能透明穿透。

用 SSH 的 ProxyJump 实现跨多重物理隔离网的安全穿透,核心不是“绕过”隔离,而是让合法流量在每一层隔离边界上,都走预授权的、加密的、受控的通道。它不打破网络策略,而是严格遵循“逐层放行”的安全设计——每台跳板机只负责把加密流量转发给下一台它被允许通信的机器。
确保每一层都满足基础前提
物理隔离网之间通常靠防火墙或 ACL 限制通信,ProxyJump 能起作用的前提是:网络路径本身是通的,只是不能直连目标。所以必须先确认:
- 你的本地终端能 SSH 连通第一台跳板机(比如公网堡垒机),端口 22 开放且策略允许
- 第一台跳板机能 SSH 连通第二台(比如 DMZ 区跳板机),这是内网策略决定的,需运维提前开通白名单
- 第二台能连通第三台(比如核心数据区服务器),同样依赖该区域的准入规则
- 所有节点(本地 + 每台跳板机)OpenSSH 版本 ≥ 7.3,否则 ProxyJump 指令会被忽略
用 ~/.ssh/config 定义清晰的跳转链
配置文件是集中管理穿透逻辑的关键。假设拓扑为:本地 → 公网堡垒机(jump1)→ 内网跳板机(jump2)→ 核心数据库(db01),可这样写:
Host jump1
HostName 203.0.113.10
User ops
IdentityFile ~/.ssh/id_ed25519_jump1
Host jump2
HostName 192.168.1.5
User admin
IdentityFile ~/.ssh/id_ed25519_jump2
ProxyJump jump1
Host db01
HostName 10.1.2.10
User dba
IdentityFile ~/.ssh/id_ed25519_db01
ProxyJump jump2
这样定义后,执行 ssh db01 就会自动完成三级穿透,整个过程对用户透明,且所有连接都复用 SSH 加密隧道,中间节点无法解密载荷。
密钥必须逐级部署,且权限严格收紧
物理隔离环境对认证更敏感,任何环节输密码都会中断自动化流程,也违背审计要求:
- 本地到 jump1:用 ssh-copy-id 把本地私钥对应公钥装进 jump1 的
~/.ssh/authorized_keys - jump1 到 jump2:登录 jump1 后,生成专用密钥对(不要复用),再把公钥部署到 jump2
- jump2 到 db01:同理,在 jump2 上生成密钥并部署到 db01
- 所有私钥文件权限必须是
600;Windows 下还需用 icacls 禁用继承权限,否则 SSH 拒绝加载
配合工具实现真正可用的穿透体验
光能 ssh 登录还不够,实际工作中还需要传文件、开端口转发、图形化调试:
- SCP/SFTP 直达:scp file.txt db01:/tmp/ —— 不用手动跳转,命令自动走完整链路
- 端口转发:ssh -L 5432:localhost:5432 db01,之后本地 psql -h 127.0.0.1 -p 5432 就能直连远端数据库
- Xshell 或 VS Code Remote-SSH:只要底层调用系统 ssh 命令,且 config 文件正确,就能直接连接 db01,无需额外插件或代理设置











