一、背景
在日常系统开发中,常常需要将程序部署到指定内部网络环境下,维护人员会通过堡垒机(跳板机)来访问内网的系统。此景下,当系统需要联机DEBUG时会受堡垒机的影响。不过依靠ssh的隧道功能,可以很方便的避开此问题。
二、实操
假设网络拓扑环境如下:
1、在服务器A上开启远程调试端口
假设我们在服务器A上可通过如下命令开启程序调试端口:
java -Xms2457m -Xmx2457m -Xmn921m -server \
-Dsun.net.inetaddr.ttl=60 \
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=29776 \
-jar /usr/lib/demo/demo-server-1.0.0-SNAPSHOT.jar
2、在堡垒机X上通过ssh在本地开启29776端口并映射到服务器A的29776端口上
在堡垒机器X上使用如下命令开启本地到服务器A的29776端口映射:
ssh -fCNg -L 29776:172.26.5.40:29776 root@172.26.5.40
对于ssh各个参数的说明大致如下:
-L <local-port>:<remote-host>:<remote-port> : 本地端口与远程主机端口的映射配置
-f : 请求 ssh 在执行命令之前转到后台
-C : 请求压缩所有数据(包括 stdin、stdout、stderr 和用于转发的 X11、TCP 和 UNIX 域连接的数据)
-N : 不执行远程命令。此选项用于只需要端口转发功能时
-g: 允许远程主机连接到本地转发端口。如果用于多路复用连接,则必须在主进程上指定此选项
详细参数可参考:利用SSH隧道技术穿越内网访问远程设备
3、使用IDEA启动到堡垒机的DEBUG操作
(1)点击 + 号找到 Remote JVM Debug
(2) 添加一个Remote JVM Debug
(3)配置堡垒机X的IP地址和做了映射的29776端口;
至此,就完成了远程DEBUG的相关配置,打上断点,启动debug程序吧。