1、引入pom
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
2、创建一个ssh连接配置
package cn.com.baidu.jswyj.system.common.config;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import org.apache.log4j.Logger;
import org.springframework.boot.context.embedded.ServletContextInitializer;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.Properties;
@Component
public class SshConfiguration implements ServletContextInitializer {
protected final Logger log = Logger.getLogger(this.getClass());
public SshConfiguration() {
try {
Properties p = new Properties();
p.load(getClass().getResourceAsStream("/application.properties"));
//如果配置文件包含ssh.forward.enabled属性,则使用ssh转发
if(p.getProperty("ssh.forward.enabled")!=null){
log.info("ssh forward is opend.");
log.info("ssh init ……");
Session session = new JSch().getSession(p.getProperty("ssh.forward.username"),p.getProperty("ssh.forward.host"),Integer.valueOf(p.getProperty("ssh.forward.port")));
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(p.getProperty("ssh.forward.password"));
session.connect();
session.setPortForwardingL(p.getProperty("ssh.forward.from_host"),Integer.valueOf(p.getProperty("ssh.forward.from_port")) ,p.getProperty("ssh.forward.to_host") ,Integer.valueOf(p.getProperty("ssh.forward.to_port")) );
}else{
log.info("ssh forward is closed.");
}
} catch (IOException e) {
log.error("ssh IOException failed.", e);
} catch (JSchException e) {
log.error("ssh JSchException failed.", e);
} catch (Exception e) {
log.error("ssh settings is failed. skip!", e);
}
}
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
}
}
3、修改application.properties配置文件
添加配置:
#ssh配置
ssh.forward.enabled
#SSH地址
ssh.forward.host=ssh.server.com
#SSH端口
ssh.forward.port=22
#SSH用户名
ssh.forward.username=root
#SSH密码
ssh.forward.password=123
#绑定的本地地址
ssh.forward.from_host=localhost
#绑定的本地端口
ssh.forward.from_port=3307
#正向代理的远程地址
ssh.forward.to_host=yuancheng.com
#正向代理的远程端口
ssh.forward.to_port=3306
修改配置:
spring.datasource.url=jdbc:mysql://localhost:3307/test?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123
原理:项目启动时先创建ssh连接,监听本地3307端口。
然后再创建数据库连接,连接本地3307端口,连接请求就会通过ssh服务器被转发到远程3306端口