springboot如何通過(guò)SSH連接遠(yuǎn)程服務(wù)器
業(yè)務(wù)場(chǎng)景
處于對(duì)安全角度的考慮并且服務(wù)器不在同一個(gè)局域網(wǎng)下,服務(wù)器的訪問(wèn)地址不適合直接放到公網(wǎng)上,需要本地服務(wù)器通過(guò)ssh信道轉(zhuǎn)發(fā)到遠(yuǎn)程服務(wù)器中。
springboot單體項(xiàng)目連接服務(wù)器。
解決方法
引入依賴
<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.53</version> </dependency>
賬號(hào)密碼驗(yàn)證連接SSH
- SSH連接工具類
import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import java.util.Properties; /** * SSH連接遠(yuǎn)程服務(wù)器轉(zhuǎn)發(fā)工具類 */ public class SshConnectionTool { //ssh連接的用戶名 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ì)話 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-01spring 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-06Javamelody監(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-10SpringBoot利用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-06Mybatis基礎(chǔ)概念與高級(jí)應(yīng)用小結(jié)
這篇文章主要介紹了Mybatis基礎(chǔ)回顧與高級(jí)應(yīng)用,本文內(nèi)容有點(diǎn)小長(zhǎng),希望大家耐心閱讀,此文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06Java日常練習(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