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;
	}


posted @ 2018-05-04 11:07  luoylove  阅读(1111)  评论(0编辑  收藏  举报