一、引入maven
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
二、添加配置文件SSH.properties
#本地端口(就是本地访问这个端口,会被转发到所配置的数据库服务器)
lport=10010
#SSH服务器ip
host=172.31.196.10
#SSH访问端口
port=3320
#SSH连接用户名
user=root
#SSH连接密码
password=1234
#秘钥文件路径(跟密码只要配置其中一个即可,优先级高于password)
#pem_file_path=/Users/stonewang/dev/pem/aaa.pem
# 远程数据库服务器(是数据库的! 注意数据库的账号密码不需要在这里指定,在jdbc里指定或springboot里配置)
rhost=172.122.241.33
#远程数据库服务端口
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;//远程数据库服务器
static int rport;//远程数据库服务端口
static String user;//SSH连接用户名
static String password;//SSH连接密码
static String pem_file_path;//SSH连接密码
static String host;//SSH服务器
static int port;//SSH访问端口
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服务器版本信息
//step2: 设置SSH本地端口转发,本地转发到远程
int assinged_port = session.setPortForwardingL(lport, rhost, rport);
System.out.println("ssh隧道配置: localhost:" + assinged_port + " -> " + rhost + ":" + rport);
} catch (Exception e) {
if (null != session) {
//关闭ssh连接
session.disconnect();
}
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
网友评论