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