본문 바로가기
Back-end/JAVA & Spring

[JAVA] SSH 터널링 후 DB 연결

by 꼬바리 2021. 8. 18.

DB 연결은 SSH 탭에 포트포워딩 하는 호스트와 포트 등 적어주고 DB 연결 하면 뚝딱 해결했지만

난 업무적으로 자바코드로 DB 연결후 엑셀 파일로 출력 해야하는 문제가 있었다.

 

 

Maria DB를 사용 하였다.

 

SSH 터널링 -> 포트포워딩 -> 포트포워딩된 포트를 넣어줘서 DB 연결

 

public class DBcon_73 {

	String driver = "org.mariadb.jdbc.Driver";
	Connection conn = null;		// DB 접속 객체선언
	PreparedStatement pstmt = null;		// sql 실행할 객체 선언
	ResultSet rs = null;		// sql 실행결과를 담을 객체 선언
	
	private Session session;
	
	public static void main(String[] args) {
		DBcon_73 dbcon73 = new DBcon_73();
	}

	public DBcon_73() {
		
		String SSHhost = ""; //SSH 호스트 
		String DBhost = "";	//DB 호스트 
		String localhost ="127.0.0.1";	//local
		int port = 3306;	//기본 포트
		
		
		try {
			JSch jsch = new JSch();
			//ssh 로 우선 접속후 port 포워딩을 통해서 mariaDB에 붙인다
			
			session = jsch.getSession("SSH아이디", SSHhost, 22);		//SSH 의 기본 포트는 22
			session.setPassword("SSH비번");
			System.out.println("SSH Connection...");			
			session.setConfig("StrictHostKeyChecking", "no");

			session.connect();
			
			int forward_port = session.setPortForwardingL(0, localhost, 3306); //127.0.0.1/  0으로 접근한 포트를 연결HOST/3306으로 포트포워딩
			System.out.println("localhost: "+forward_port+" -> "+localhost+":"+port);

			Class.forName(driver);
			conn = DriverManager.getConnection("jdbc:mariadb://"+localhost+":"+forward_port+"/데이터베이스이름", "디비유저", "디비비번");

			if (conn != null) {
				System.out.println("DB 접속 성공 " + conn);

			}

		} catch (JSchException e) { 
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			System.out.println("드라이버 로드 실패");
		} catch (SQLException e) {
			System.out.println("DB 접속 실패");
			e.printStackTrace();
		}

	}
	
	public void closeSSH() {
		session.disconnect();
	}
    
    
    
    
 }

코드속 주석 처리로 설명이 되어있다.

난 한창 해멨으나, 쉽게 연결 가능 하다.

 

SSH는 연결후 close를 꼭 해줘야 한다.

 

728x90
반응형

댓글