Windows 通过 SSH 隧道免密远程调试 Docker 中的 Spring Boot(JDWP)
本文档说明如何在 Windows 开发机 上,通过 SSH 隧道 + 免密登录 的方式,安全地远程调试部署在 Linux 主机 Docker 容器 中的 Spring Boot 服务(JDWP / Remote Debug)。
适用场景:
- Spring Boot 服务运行在 Linux Docker 容器中
- 不希望暴露 5005 调试端口到公网
- 使用 IDEA Remote Debug
- 使用 SSH Key 实现免密访问
一、整体架构说明
调试链路如下:
Windows IDEA → localhost:5005
→ SSH 隧道
→ Linux 主机 localhost:5005
→ Docker 容器 JVM JDWP
关键原则:
- 对外只暴露 SSH(22 端口)
- JDWP 端口只在内网 / 本机可访问
- 调试流量通过 SSH 隧道转发
二、SSH 隧道命令说明
在 Windows 开发机上执行以下命令:
ssh -L 5005:127.0.0.1:5005 root@192.168.1.100
参数说明:
| 部分 | 含义 | 备注 |
|---|---|---|
| -L | 本地端口转发 | 固定参数 |
| 5005 | Windows 本地监听端口 | IDEA 连接的端口 |
| 127.0.0.1:5005 | Linux 主机上的目标地址 | 5005 映射到容器 JDWP |
| root@192.168.1.100 | Linux 测试机 SSH 地址 | 可使用域名 |
执行成功后:
- Windows 本机的 localhost:5005 会被监听
- 所有流量会通过 SSH 转发到 Linux 主机的 127.0.0.1:5005
三、Linux 主机与 Docker 容器约定
1. Docker 容器内 JVM 启动参数
JVM 需开启 JDWP 调试:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005
说明:
- 5005 为容器内部 JDWP 端口
- suspend=n 避免容器启动阻塞
2. Docker 端口映射
Docker 启动时,将容器 JDWP 端口映射到 Linux 主机的本地端口(仅本机访问):
-p 127.0.0.1:5005:5005
效果:
- Linux 主机可通过 127.0.0.1:5005 访问容器 JDWP
- 不对公网暴露 5005
docker run命令示例:
docker run -e JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005" -e SERVER_PORT=8003 --name xxx -p 8003:8003 -p 5005:5005 -d openjdk:8u322-jdk-bullseye四、Windows 端配置 SSH 免密登录
可以参考此文档。
1. 生成 SSH Key
在 Windows(Git Bash / WSL / PowerShell)执行:
cd ~
mkdir -p .ssh
cd .ssh
ssh-keygen -t rsa -f for192.168.1.100说明:
- 私钥:for192.168.1.100
- 公钥:for192.168.1.100.pub
- 可不设置 passphrase 以便自动化
2. 拷贝公钥到 Linux 主机
执行:
ssh-copy-id -i ./for192.168.1.100.pub root@192.168.1.100
首次需要输入 root 密码,之后即可免密登录
3. 配置 SSH Client(~/.ssh/config)
在 Windows 的 ~/.ssh/config 文件中添加:
Host 192.168.1.100
HostName 192.168.1.100
User root
PreferredAuthentications publickey
IdentityFile ~/.ssh/for192.168.1.100配置完成后:
- SSH 自动使用指定私钥
- 不再询问密码
五、验证免密与隧道
1. 验证免密登录
ssh root@192.168.1.100
如果无需输入密码即可登录,说明配置成功
2. 建立 SSH 隧道
ssh -L 5005:127.0.0.1:5005 root@192.168.1.100
保持该终端窗口不关闭
六、IDEA Remote Debug 配置
在 IntelliJ IDEA 中:
Run → Edit Configurations → + → Remote JVM Debug
配置如下:
Host: localhost
Port: 5005
点击 Debug,即可远程调试 Docker 容器中的 Spring Boot 服务
七、安全与最佳实践说明
- 不直接暴露 JDWP 端口到公网
- 所有调试流量通过 SSH 加密隧道
- 调试权限由 SSH 登录权限控制
- 适用于测试环境、预发布环境
八、总结
通过 SSH 隧道实现的 Remote Debug 具有以下优点:
- 不修改业务代码
- 不暴露调试端口
- 支持 Windows 开发机
- 可与 Docker、Nacos、XXL-JOB 共存
这是当前生产和测试环境中最安全、最可控的远程调试方案。
最后编辑:张三 更新时间:2026-01-14 17:39