如何通过 ProxyJump 配置 SSH 隧道经过跳板机连接内网?

文章导读
最推荐直接使用 SSH 客户端的 -J 参数进行临时连接,若需长期维护则写入 ~/.ssh/config 配置文件,适用于需要通过堡垒机访问内网服务器的运维场景。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
A A

最推荐直接使用 SSH 客户端的 -J 参数进行临时连接,若需长期维护则写入 ~/.ssh/config 配置文件,适用于需要通过堡垒机访问内网服务器的运维场景。

先说结论:ProxyJump 是 OpenSSH 7.3+ 内置的标准功能,无需额外安装工具,配置正确后可直接穿透跳板机。

  • 适合:需要通过单一或多级跳板机访问内网目标机的场景
  • 先看:本地 SSH 客户端版本是否支持 ProxyJump 指令(OpenSSH 7.3+)
  • 建议:优先使用密钥认证,避免在跳板机层输入密码导致自动化中断

命令速用版

ssh -J [跳板机用户@跳板机 IP: 端口] -p [目标机端口] [目标机用户@目标机 IP]

例如:

ssh -J admin@192.168.1.100:22 -p 22 root@10.0.0.5

注意:目标主机端口应使用 -p 参数指定,而非直接拼接在 IP 后,否则部分客户端会解析失败。

为什么会这样

传统方式需要先用 SSH 登录跳板机,再从跳板机 SSH 登录目标机,操作繁琐且难以直接使用本地端口转发。ProxyJump 利用 SSH 协议的隧道能力,在本地客户端与目标机之间建立一条经过跳板机转发的加密通道,对使用者而言就像直接连接目标机一样。

分步处理

1. 检查客户端支持情况

如何通过 ProxyJump 配置 SSH 隧道经过跳板机连接内网?

在终端输入 ssh -V 查看版本,OpenSSH 7.3 及以上版本支持该功能。若版本过老,需考虑升级客户端或使用 ProxyCommand 替代。

2. 配置免密登录(可选但推荐)

确保本地公钥已添加到跳板机和目标机的 authorized_keys 中,否则每次连接可能需要输入两次密码。

3. 写入配置文件

编辑 ~/.ssh/config 文件,添加以下内容:

如何通过 ProxyJump 配置 SSH 隧道经过跳板机连接内网?
Host target-server
    HostName 10.0.0.5
    User root
    ProxyJump admin@192.168.1.100
    Port 22

配置完成后,只需执行 ssh target-server 即可自动经过跳板机连接。

怎么验证是否生效

1. verbose 模式观察

使用 ssh -v target-server 命令,观察日志中是否显示连接到跳板机 IP 的过程,以及后续连接到目标机 IP 的过程。

2. 确认主机身份

连接成功后,执行 hostname 或 ifconfig 命令,确认当前所在机器是目标内网机器而非跳板机。

常见坑

  • 密钥代理转发:若需在目标机上操作 git 等需要密钥的服务,需在配置中添加 ForwardAgent yes,但需注意安全风险。
  • 网络策略限制:部分公司网络禁止 SSH 隧道,若连接被重置,需确认网络安全组或防火墙是否允许该流量。
    排查命令:telnet 192.168.1.100 22 或 nc -zv 192.168.1.100 22,若无法连通则说明网络策略拦截。
  • 旧版本兼容:若连接报错 Unsupported option,说明客户端版本过低,不支持 ProxyJump 指令。
    典型报错:debug1: Unsupported option "ProxyJump" 或 ssh: Unsupported option "ProxyJump"。
  • 端口语法错误:目标主机端口不要写成 user@host:port 格式,应使用 -p 参数,否则可能报错 ssh: Could not resolve hostname。