公司现在存在这种情况, Java服务都部署在内网服务器上,只有一台跳板机能够访问到这些机器,我们就不能跟平常一样用IDEA的remote debug功能来远程Debug代码了;
那么有什么方法能够解决这个问题呢?
解决思路:最终还是要实现远程Debug调试代码,因为这样最直接,那么现在的问题就是如何 远程debug 内网中的Java服务;要解决这个问题,我们首先需要了解到 Java远程debug的工作原理;更详细的原理可以自行百度,但是一句话概述就是 通过Socket与远程Java服务进行TCP连接,然后代码的执行会执行回调函数来通知到本地 所以问题就变成了,如何与内网服务器进行通信 。 好像问题变得简单了, 我们当然是不能与内网进行直接通信, 但是我们有很多种方式来与内网通信啊;
方法一:内网穿透(未验证) 内网穿透工具很多, 有ngrok、spike、等等,但是这里推荐的是 Frp https://github.com/fatedier/frp frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。 他的功能很多,很强,这里我们需要用到的功能点是: 范围端口映射 这一个功能点我没有去验证, 但是它的功能点就是 端口映射, 理论上是可行的, 我们可以在本机安装 frps的服务端 然后目标内网服务器上安装 frpc的客户端,配置好端口映射 ,就可以远程通信了;
说明: 这种方案应该可行、但是丧失了安全性; 对安全性要求不高的情况可以采用;
方法二: SSH端口转发---SSH隧道
这里直接贴上 命令: ssh -l root -L 本地监听端口:目标服务IP:目标服务Debug端口 -p 22 跳板机
回车,输入跳板机密码;
完事之后,就已经做好了端口转发了,这个时候我们去配置IDEA了然后点击启动,监听成功!; 注意上面的隧道不能关掉,关掉之后就不能通信了;
参考文章:玩转SSH端口转发