SpringBoot 通过SSH跳板机连接不能直达的IP+端口

在开发过程中,我们经常会遇到联调、测试、找bug等问题,由于项目在不同的环境,我们找问题也非常不方便,无法通过本地代码debug调试。在公司内部的局域网内,通过浏览器中ModHeader修改请求参数,代理、重定向等方式可以方便不少,但还是无法解决跨网段的问题。
以下是ModHeader的代理界面,很友好的帮助我们代理,可以添加多种前端请求参数,具有PostMan的要求,请自行实践。 

2、SpringBoot通过跳板机连接远程
(1)导入依赖包

<!--ssh链接跳板机-->
<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.55</version>
</dependency>


(2)在resource目录下创建一个application.properties参数文件,自定义远程路径配置


#ssh配置
ssh.remote.enabled=1
#SSH跳板机地址
ssh.remote.host=10.0.98.51
#SSH跳板机端口
ssh.remote.port=22
#SSH跳板机用户名
ssh.remote.username=unicom
#SSH跳板机密码
ssh.remote.password=NewUni#Com@2020
#绑定的本地地址
ssh.local.resource_host=127.0.0.1
#绑定的本地端口
ssh.local.resource_port=9875
#正向代理的远程地址
ssh.remote.target_host=172.16.33.11
#正向代理的远程端口
ssh.remote.target_port=80


(3)创建shh的工具类SshConfiguration ,建立连接

package cn.unicom.config;

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.stereotype.Component;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import java.io.IOException;
import java.util.Properties;

@Component
@Slf4j
public class SshConfiguration implements ServletContextInitializer {
    private static Session session;

	/**
	* 初始化
	*/
    public SshConfiguration() {
       try {
            Properties p = new Properties();
            p.load(getClass().getResourceAsStream("/application.properties" ));
            //如果配置文件包含ssh.forward.enabled属性,则使用ssh转发
            if (p.getProperty("ssh.remote.enabled" ) != null) {
                Session session = new JSch().getSession(p.getProperty("ssh.remote.username" ), p.getProperty("ssh.remote.host" ), Integer.valueOf(p.getProperty("ssh.remote.port" )));
                session.setConfig("StrictHostKeyChecking" , "no" );
                session.setPassword(p.getProperty("ssh.remote.password" ));
                session.connect();
                //将本地44339端口的请求转发到目标地址的端口
                session.setPortForwardingL(p.getProperty("ssh.local.resource_host" ), Integer.valueOf(p.getProperty("ssh.local.resource_port" )), p.getProperty("ssh.remote.target_host" ), Integer.valueOf(p.getProperty("ssh.remote.target_port" )));
            } else {
                log.info("ssh forward is closed." );
            }
        } catch (IOException e) {
            log.error("ssh IOException failed." , e);
        } catch (JSchException e) {
            log.error("ssh JSchException failed." , e);
        } catch (Exception e) {
            log.error("ssh settings is failed. skip!" , e);
        }
    }


    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
    }

	/**
	 * 断开SSH连接
	 */
	public void destroy() {
		this.session.disconnect();
	}
}


(4)修改yml文件中数据库连接中的 url地址与端口

datasource:
    hikari:
         auto-commit: true
         connection-test-query: SELECT 1
         connection-timeout: 30000
         idle-timeout: 180000
         max-lifetime: 1800000
         minimum-idle: 5
         maximum-pool-size: 100
         pool-name: "HikariCP"
      driverClassName: com.mysql.cj.jdbc.Driver
      username: ENC(WmGteHIUcNNXF4FJ9qrPUw==)
      password: ENC(if9oR9N7HjAgmX/u3aZNDRqe3zwvk9sC)
      type: com.zaxxer.hikari.HikariDataSource
      url: jdbc:mysql://localhost:3307/生产库?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai


这样就可以直接连接到生产环境了,对生产环境的数据库可以进行操作了。

切记:
谨慎!谨慎!谨慎!连接成功后,错误的操作会对生产环境造成致命的错误,需要谨慎! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wcybaonier

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值