Java 使用ssh隧道連接數(shù)據(jù)庫(kù)(JDBC)

一、引入maven

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

二、添加配置文件SSH.properties

#本地端口(就是本地訪問(wèn)這個(gè)端口,會(huì)被轉(zhuǎn)發(fā)到所配置的數(shù)據(jù)庫(kù)服務(wù)器)
lport=10010

#SSH服務(wù)器ip
host=172.31.196.10
#SSH訪問(wèn)端口
port=3320
#SSH連接用戶名
user=root
#SSH連接密碼
password=1234
#秘鑰文件路徑(跟密碼只要配置其中一個(gè)即可,優(yōu)先級(jí)高于password)
#pem_file_path=/Users/stonewang/dev/pem/aaa.pem


# 遠(yuǎn)程數(shù)據(jù)庫(kù)服務(wù)器(是數(shù)據(jù)庫(kù)的! 注意數(shù)據(jù)庫(kù)的賬號(hào)密碼不需要在這里指定,在jdbc里指定或springboot里配置)
rhost=172.122.241.33
#遠(yuǎn)程數(shù)據(jù)庫(kù)服務(wù)端口
rport=3306

三、java配置

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import org.springframework.context.annotation.Configuration;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

@Configuration
public class SSHConfig {
    static Integer lport;//本地端口
    static String rhost;//遠(yuǎn)程數(shù)據(jù)庫(kù)服務(wù)器
    static int rport;//遠(yuǎn)程數(shù)據(jù)庫(kù)服務(wù)端口

    static String user;//SSH連接用戶名
    static String password;//SSH連接密碼
    static String pem_file_path;//SSH連接密碼
    static String host;//SSH服務(wù)器
    static int port;//SSH訪問(wèn)端口

    static {
        //讀取配置文件
        try {
            // 獲取hive.properties文件的路徑
            InputStream is = SSHConfig.class.getClassLoader().getResourceAsStream("SSH.properties");
            Properties prop = new Properties();
            prop.load(is);
            // 讀取配置文件的值
            lport = Integer.valueOf(prop.getProperty("lport"));
            rhost = prop.getProperty("rhost");
            rport = Integer.valueOf(prop.getProperty("rport"));
            user = prop.getProperty("user");
            password = prop.getProperty("password");
            pem_file_path = prop.getProperty("pem_file_path");
            host = prop.getProperty("host");
            port = Integer.valueOf(prop.getProperty("port"));



            JSch jsch = new JSch();
            Session session = null;
            try {
                if (pem_file_path != null) {
                    jsch.addIdentity(pem_file_path);
                }
                session = jsch.getSession(user, host, port);

                if (pem_file_path == null) {
                    session.setPassword(password);
                }

                session.setConfig("StrictHostKeyChecking", "no");
                // step1:建立ssh連接
                session.connect();
                System.out.println(session.getServerVersion());//這里打印SSH服務(wù)器版本信息
                //step2: 設(shè)置SSH本地端口轉(zhuǎn)發(fā),本地轉(zhuǎn)發(fā)到遠(yuǎn)程
                int assinged_port = session.setPortForwardingL(lport, rhost, rport);
                System.out.println("ssh隧道配置: localhost:" + assinged_port + " -> " + rhost + ":" + rport);
            } catch (Exception e) {
                if (null != session) {
                    //關(guān)閉ssh連接
                    session.disconnect();
                }
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容