2022年7月7日 星期四

Spring Boot使用SSH連線至資料庫

在本機建立SSH連線,連線到SSH Server再連到資料庫。

目前專案因移轉至另一台有設置SSH連線的資料庫。

故本機端開發時也需進行相關設定,在解決連線問題後順便記錄下來。

這邊使用Jsch套件來進行SSH連線

	<dependency>
	        <groupId>com.jcraft</groupId>
	        <artifactId>jsch</artifactId>
	        <version>0.1.53</version>
    	</dependency>

記錄連線相關參數,這邊為了方便筆記直接寫在yml檔中

ssh:
 settings:
   host: #ssh setting host
   username: #ssh setting username
   password: #ssh setting password
   port: #ssh setting port
 forward: 
   lhost: 127.0.0.10 #可隨意改,內部不衝突即可
   lport: 3310  #可隨意改,內部不衝突即可
   rhost: #server host
   rport: #server port

spring:
  datasource:
    url: jdbc:mysql://${ssh.forward.lhost}:${ssh.forward.lport}/{@db-name}
    username: #db-username
    password: #db-password

附上其對應DBeaver的欄位








並使用JSch套件,在服務啟動時建立SSH連線即可

        @Value("${ssh.forward.lhost}")
	String lhost;
	@Value("${ssh.forward.lport}")
	int lport;
	@Value("${ssh.forward.rhost}")
	String rhost;
	@Value("${ssh.forward.rport}")
	int rport;
	@Value("${ssh.settings.username}")
	String user;
	@Value("${ssh.settings.password}")
	String password;
	@Value("${ssh.settings.host}")
	String host;
	@Value("${ssh.settings.port}")
	int port;
        @Bean
	public void sshConfig() {
		try {
			JSch jsch = new JSch();
			Session session = jsch.getSession(user, host, port);
			session.setConfig("StrictHostKeyChecking", "no");
			session.setPassword(password);

			System.out.println("ssh connection...");
			session.connect();
			session.setPortForwardingL(lhost, lport, rhost, rport);
			System.out.println(lhost + ":" + lport + " -> " + rhost + ":" + rport);
		} catch (Exception e) {
			System.err.print(e);
		}
	}
完成後本機即可正常連線至資料庫
https://github.com/ab571kimo/ssh-connect.git

沒有留言:

張貼留言