jsch是一个纯java实现的ssh,作用有很多,比如实现一个sftp或者ftp,java执行shell命令等等,今天用做于模拟登陆跳板机然后操作数据库。
首先导入maven依赖,数据库用的是mysql
1<dependency> 2 <groupId>com.jcraft</groupId> 3 <artifactId>jsch</artifactId> 4 <version>0.1.53</version> 5 </dependency> 6 <dependency> 7 <groupId>mysql</groupId> 8 <artifactId>mysql-connector-java</artifactId> 9 <version>5.1.36</version> 10 </dependency>
然后建立一个ssh通道模拟登陆到跳板机
1public class JDBCSSHChannel { 2 /** 3 * 4 * @param localPort 本地host 建议mysql 3306 redis 6379 5 * @param sshHost ssh host 6 * @param sshPort ssh port 7 * @param sshUserName ssh 用户名 8 * @param sshPassWord ssh密码 9 * @param remotoHost 远程机器地址 10 * @param remotoPort 远程机器端口 11 */ 12 public static void goSSH(int localPort, String sshHost, int sshPort, 13 String sshUserName, String sshPassWord, 14 String remotoHost, int remotoPort) { 15 try { 16 JSch jsch = new JSch(); 17 //登陆跳板机 18 Session session = jsch.getSession(sshUserName, sshHost, sshPort); 19 session.setPassword(sshPassWord); 20 session.setConfig("StrictHostKeyChecking", "no"); 21 session.connect(); 22 //通过ssh连接到mysql机器 23 int assinged_port = session.setPortForwardingL(localPort, remotoHost, remotoPort); 24 } catch (Exception e) { 25 e.printStackTrace(); 26 } 27 } 28}
然后连接mysql,在连接mysql前调用下goSSH方法建立跳板机通道即可
1public static Connection connDB() { 2 // 声明Connection对象 3 Connection con = null; 4 // 驱动程序名 5 String driver = "com.mysql.jdbc.Driver"; 6 // URL指向要访问的数据库名mydata 7 String url = "jdbc:mysql://192.168.1.1:3306/TEST"; 8 // MySQL配置时的用户名 9 String user = "root"; 10 // MySQL配置时的密码 11 String password = "123456"; 12 // 遍历查询结果集 13 try { 14 // 加载驱动程序 15 try { 16 Class.forName(driver); 17 } catch (ClassNotFoundException e) { 18 // TODO Auto-generated catch block 19 e.printStackTrace(); 20 } 21 // 1.建立跳板机通道 22 // goSSH(localPort, sshHost, sshPort, sshUserName, sshPassWord, remotoHost, 23 // remotoPort); 24 // 2.getConnection()方法,连接MySQL数据库!! 25 con = DriverManager.getConnection(url, user, password); 26 } catch (SQLException e) { 27 // TODO: handle exception 28 e.printStackTrace(); 29 } 30 return con; 31 }