1. 程式人生 > >java Jsch實現跳板機操作遠端資料庫

java Jsch實現跳板機操作遠端資料庫

jsch是一個純java實現的ssh,作用有很多,比如實現一個sftp或者ftp,java執行shell命令等等,今天用做於模擬登陸跳板機然後操作資料庫。

首先匯入maven依賴,資料庫用的是mysql

	<dependency>
		<groupId>com.jcraft</groupId>
		<artifactId>jsch</artifactId>
		<version>0.1.53</version>
	</dependency>
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.36</version>
	</dependency>

然後建立一個ssh通道模擬登陸到跳板機

public class JDBCSSHChannel {
	/**
	 * 
	 * @param localPort  本地host 建議mysql 3306 redis 6379
	 * @param sshHost   ssh host
	 * @param sshPort   ssh port
	 * @param sshUserName   ssh 使用者名稱
	 * @param sshPassWord   ssh密碼
	 * @param remotoHost   遠端機器地址
	 * @param remotoPort	遠端機器埠
	 */
	public static void goSSH(int localPort, String sshHost, int sshPort,
							String sshUserName, String sshPassWord,
							String remotoHost, int remotoPort) {
        try {  
            JSch jsch = new JSch();  
            //登陸跳板機
            Session session = jsch.getSession(sshUserName, sshHost, sshPort);  
            session.setPassword(sshPassWord);  
            session.setConfig("StrictHostKeyChecking", "no");  
            session.connect();  
            //通過ssh連線到mysql機器
            int assinged_port = session.setPortForwardingL(localPort, remotoHost, remotoPort); 
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
	}
}

然後連線mysql,在連線mysql前呼叫下goSSH方法建立跳板機通道即可

public static Connection connDB() {
		// 宣告Connection物件
		Connection con = null;
		// 驅動程式名
		String driver = "com.mysql.jdbc.Driver";
		// URL指向要訪問的資料庫名mydata
		String url = "jdbc:mysql://192.168.1.1:3306/TEST";
		// MySQL配置時的使用者名稱
		String user = "root";
		// MySQL配置時的密碼
		String password = "123456";
		// 遍歷查詢結果集
		try {
			// 載入驅動程式
			try {
				Class.forName(driver);
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// 1.建立跳板機通道
			// goSSH(localPort, sshHost, sshPort, sshUserName, sshPassWord, remotoHost,
			// remotoPort);
			// 2.getConnection()方法,連線MySQL資料庫!!
			con = DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return con;
	}