在本機建立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
沒有留言:
張貼留言