跳板机 SSH 端口转发
跳板机 SSH 端口转发
一、场景描述
| 节点 | IP 地址 | 角色 | 可达性 |
|---|---|---|---|
| 本机 | Windows 本地 | 操作终端 | 可 SSH 到 205 |
| 跳板机 | 172.16.225.205 | SSH 中继 | 可访问 206 的 80/443 |
| 目标机 | 172.16.225.206 | Web 服务器 | 禁止 SSH,仅开放 HTTP/HTTPS |
目标:在本机 Windows 浏览器中访问 206 的 Web 管理页面(/aims/index.html#/system/config),登录后开启 SSH 访问。
二、网络拓扑
[本机 Windows] --SSH隧道--> [172.16.225.205 跳板机] --内网--> [172.16.225.206 Web服务器]
↑ ↑
浏览器访问 localhost:8443 443 端口 (HTTPS)
↑ ↑
浏览器访问 localhost:8443 443 端口 (HTTPS)
三、试错过程
尝试 1:转发到目标 8086 端口
ssh -N -L 8080:172.16.225.206:8086 root@172.16.225.205
浏览器访问:http://localhost:8080/aims/...
结果:连接失败,目标服务未监听 8086 端口
尝试 2:转发到目标 80 端口(HTTP)
ssh -N -L 8086:172.16.225.206:80 root@172.16.225.205
浏览器访问:http://localhost:8086/aims/index.html#/system/config
结果:地址栏自动跳转为
https://localhost/...,显示"无法访问此页面"尝试 3:清除浏览器 HSTS 缓存
Edge/Chrome 访问 chrome://net-internals/#hsts,删除 localhost 域安全策略。
结果:无效,仍自动跳转 HTTPS
尝试 4:无痕模式
Ctrl+Shift+N 打开无痕窗口,访问 http://localhost:8086
结果:无效,仍被强制 HTTPS
尝试 5:改用 127.0.0.1
访问 http://127.0.0.1:8086/aims/...
结果:无效,127.0.0.1 同样被强制 HTTPS
尝试 6:SOCKS5 动态代理
ssh -N -D 1080 root@172.16.225.205
浏览器 Proxy Switcher 配置 SOCKS5 代理 127.0.0.1:1080,直接访问原始地址。
结果:仍然失败,无法建立有效连接
四、根因排查
关键诊断命令(在跳板机 205 上执行)
# 测试 80 端口
curl -I http://172.16.225.206/aims/index.html
# 返回结果:
HTTP/1.1 301 Moved Permanently
Location: https://172.16.225.206/aims/index.html
# 测试 443 端口
curl -Ik https://172.16.225.206/aims/index.html
# 返回结果:
HTTP/1.1 200
根因确认:目标服务器(206)对 80 端口的 HTTP 请求返回 301 永久重定向,强制跳转到 HTTPS(443 端口)。因此无论通过何种方式访问 HTTP,最终都会被重定向到 HTTPS,而之前的 SSH 隧道只转发了 80 端口,导致 HTTPS 请求无法到达目标。
五、最终成功方案
成功方案:转发目标 443 端口(HTTPS)
步骤 1:建立 SSH 隧道
ssh -N -L 8443:172.16.225.206:443 root@172.16.225.205
保持 PowerShell 窗口运行(按 Ctrl+C 断开)。
步骤 2:浏览器访问
https://localhost:8443/aims/index.html#/system/config
步骤 3:处理证书警告
浏览器提示"您的连接不是私密连接"(证书域名不匹配,因为证书是给 172.16.225.206 的,不是给 localhost 的)。
点击 高级 → 继续前往 localhost(不安全)
步骤 4:登录并开启 SSH
- 用户名:
******** - 密码:
****** - 进入系统配置页面,开启 SSH 访问
结果:成功访问 Web 管理页面,完成 SSH 开启操作
六、命令详解
| 参数 | 含义 |
|---|---|
ssh |
安全外壳协议客户端 |
-N |
No command,只建立隧道,不执行远程 shell |
-L |
Local forward,本地端口转发 |
8443 |
本地监听端口(本机 Windows 上) |
172.16.225.206 |
目标服务器地址 |
443 |
目标端口(HTTPS 标准端口) |
root@172.16.225.205 |
跳板机(SSH 中继) |
数据流向
浏览器 -> localhost:8443 -> SSH隧道 -> 172.16.225.205 -> 172.16.225.206:443
(本机) (加密) (跳板机) (目标Web服务器)
经验总结
- 先排查再转发:在跳板机上用
curl -I确认目标端口和协议,避免盲目尝试 - 注意 301 重定向:服务器可能强制 HTTPS,HTTP 转发无用
- HTTPS 需转发 443:SSL/TLS 握手必须在目标服务器完成,不能通过 HTTP 隧道中转
- 证书警告可忽略:通过 localhost 访问时域名不匹配是正常的,点击继续即可
- 保持 SSH 窗口运行:
-N模式下隧道随 SSH 连接存活,断开即失效

浙公网安备 33010602011771号