springboot如何通過(guò)SSH連接遠(yuǎn)程服務(wù)器
業(yè)務(wù)場(chǎng)景
處于對(duì)安全角度的考慮并且服務(wù)器不在同一個(gè)局域網(wǎng)下,服務(wù)器的訪(fǎng)問(wèn)地址不適合直接放到公網(wǎng)上,需要本地服務(wù)器通過(guò)ssh信道轉(zhuǎn)發(fā)到遠(yuǎn)程服務(wù)器中。
springboot單體項(xiàng)目連接服務(wù)器。
解決方法
引入依賴(lài)
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.53</version>
</dependency>賬號(hào)密碼驗(yàn)證連接SSH
- SSH連接工具類(lèi)
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.util.Properties;
/**
* SSH連接遠(yuǎn)程服務(wù)器轉(zhuǎn)發(fā)工具類(lèi)
*/
public class SshConnectionTool {
//ssh連接的用戶(hù)名
private final static String SSH_USER = "test";
//ssh連接的密碼
private final static String SSH_PASSWORD = "123456";
//ssh遠(yuǎn)程連接的ip地址
private final static String SSH_REMOTE_SERVER = "12.34.56.78";
//ssh連接的端口號(hào)
private final static int SSH_REMOTE_PORT = 2721;
//遠(yuǎn)程mysql連接的IP地址
private final static String MYSQL_REMOTE_SERVER = "124.543.789.111";
//本地?cái)?shù)據(jù)庫(kù)連接時(shí)用的端口號(hào),和yml配置的端口一致
private final static int LOCAl_PORT = 3309;
//遠(yuǎn)程數(shù)據(jù)庫(kù)端口用的端口號(hào)
private final static int REMOTE_PORT = 31494;
private Session sesion; //ssh 會(huì)話(huà)
public void closeSSH ()
{
sesion.disconnect();
}
public SshConnectionTool () throws Throwable
{
JSch jsch = new JSch();
sesion = jsch.getSession(SSH_USER, SSH_REMOTE_SERVER, SSH_REMOTE_PORT);
sesion.setPassword(SSH_PASSWORD);
//設(shè)置連接過(guò)程不校驗(yàn)known_hosts文件中的信息
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
sesion.setConfig(config);
sesion.connect(); //ssh 建立連接!
//根據(jù)安全策略,您必須通過(guò)轉(zhuǎn)發(fā)端口進(jìn)行連接
sesion.setPortForwardingL(LOCAl_PORT, MYSQL_REMOTE_SERVER, REMOTE_PORT);
}
}
- SSH連接監(jiān)視器
import org.springframework.stereotype.Component;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* SSH鏈接 監(jiān)視器
*/
@Component
public class SshContextListener implements ServletContextListener {
private SshConnectionTool conexionssh;
public SshContextListener() {
super();
}
/**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("Context initialized ... !");
try {
conexionssh = new SshConnectionTool();
} catch (Throwable e) {
e.printStackTrace(); // 連接失敗
}
}
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("Context destroyed ... !");
conexionssh.closeSSH(); // 斷開(kāi)連接
}
}
- yml 連接池配置
url: jdbc:mysql://127.0.0.1:3309/test?useUnicode=true&characterEncoding=UTF8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root password: root type: com.alibaba.druid.pool.DruidDataSource
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)隨機(jī)驗(yàn)證碼具體代碼
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)隨機(jī)驗(yàn)證碼具體代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
spring boot定時(shí)任務(wù)接收郵件并且存儲(chǔ)附件的方法講解
今天小編就為大家分享一篇關(guān)于spring boot定時(shí)任務(wù)接收郵件并且存儲(chǔ)附件的方法講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
詳解spring boot starter redis配置文件
spring-boot-starter-Redis主要是通過(guò)配置RedisConnectionFactory中的相關(guān)參數(shù)去實(shí)現(xiàn)連接redis service。下面通過(guò)本文給大家介紹在spring boot的配置文件中redis的基本配置,需要的的朋友參考下2017-07-07
詳解領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)之事件驅(qū)動(dòng)與CQRS
這篇文章分析了如何應(yīng)用事件來(lái)分離軟件核心復(fù)雜度。探究CQRS為什么廣泛應(yīng)用于DDD項(xiàng)目中,以及如何落地實(shí)現(xiàn)CQRS框架。當(dāng)然我們也要警惕一些失敗的教訓(xùn),利弊分析以后再去抉擇正確的應(yīng)對(duì)之道2021-06-06
Javamelody監(jiān)控不到sql的問(wèn)題(親測(cè)有效)??
JavaMelody是用來(lái)在QA和實(shí)際運(yùn)行生產(chǎn)環(huán)境中監(jiān)控Java或Java?EE應(yīng)用程序服務(wù)器的一個(gè)開(kāi)源框架,這篇文章主要介紹了Javamelody監(jiān)控不到sql(親測(cè)有效)??,需要的朋友可以參考下2022-10-10
SpringBoot利用jackson格式化時(shí)間的三種方法
日常開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)使用json進(jìn)行數(shù)據(jù)的傳輸,這就涉及到了對(duì)象和json的相互轉(zhuǎn)化,常用的解決方案有:Jackson(推薦)、谷歌的Gson、阿里的Fastjson,這篇文章主要給大家介紹了關(guān)于SpringBoot如何利用jackson格式化時(shí)間的相關(guān)資料,需要的朋友可以參考下2021-06-06
Mybatis基礎(chǔ)概念與高級(jí)應(yīng)用小結(jié)
這篇文章主要介紹了Mybatis基礎(chǔ)回顧與高級(jí)應(yīng)用,本文內(nèi)容有點(diǎn)小長(zhǎng),希望大家耐心閱讀,此文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(21)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-07-07

