더 나은 개발자가 되고싶다..

Spring에서 SSH Tunneling 설정하기 본문

코딩/Spring

Spring에서 SSH Tunneling 설정하기

오맹이 2020. 12. 18. 16:12

프로젝트를 진행하면서 내부망 사용으로 서버에 직접 접근을 못하는 경우가 생겼다.

 

DB는 SQL Developer, DBeaver등에서 SSH 터널링을 설정해주면 접속이 가능한데 

자바에서는 터널링 설정 부분을 코딩해야한다.

 

간단하게 보면 아래의 코드 참조

 

import java.util.Properties;

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;

public class SSHConnection {
	private final static String HOST = "DB주소";
	private final static Integer PORT = DB포트;
	private final static String SSH_USER = "DB계정";
	private final static String SSH_PW = "DB비밀번호";

	private Session session;
	
	public void closeSSH() {
		session.disconnect();
	}
	
	public SSHConnection() {
		try {
			Properties config = new Properties();
			config.put("StrictHostKeyChecking", "no");
			JSch jsch = new JSch();
			session = jsch.getSession(SSH_USER, HOST, PORT);
			session.setPassword(SSH_PW);
			session.setConfig(config);
			session.connect();
			session.setPortForwardingL(3306, "오픈되어있는 주소", 오픈포트);
		} catch (JSchException e) {
			e.printStackTrace();
		}
		
	}
}

 

※ jsch jar파일이 있어야한다.

https://mvnrepository.com/artifact/com.jcraft/jsch에서 다운 가능. pom.xml에 추가해도 된다.

 

 

1. final로 선언한 부분에 접속할 DB정보를 입력한다.

2. SSHConnection 매서드 부분에 session.setPortForwardingL()을 설정해주는데

   예시코드는 127.0.0.1:3306 번에 오픈되어있는 주소를 포트포워딩 해주는것이다. 

 

3. 이렇게 선언을 한후 아래 코드

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class MyContextListener implements ServletContextListener{

	private SSHConnection sshConnection;

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		try {
			sshConnection = new SSHConnection();
		}catch(Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		sshConnection.closeSSH();
	}
}

@WebListener 어노테이션이 붙어있기 때문에 tomcat이 실행 될 때 포트포워딩이 시작된다.

 

4. 이후 commonconfig.xml 파일에서 DB 정보를 설정

jdbc.url=jdbc:oracle:thin:@localhost:3306:서비스ID
jdbc.username=계정ID
jdbc.password=계정PW

이후 DB정보에는 포트포워딩을 127.0.0.1:3306으로 했기때문에 localhost:3306을 넣어주고 :서비스ID (orcl)을 붙여준다.

 

실행해보면 잘 된다.