SpringBoot整合ssh

来源:https://www.cnblogs.com/Duancf/archive/2022/10/11/16779224.html
-Advertisement-
Play Games

背景:測試環境連接生產環境的資料庫,無法本地調試 環境: JDK8 Maven:3.6.3 Springboot:2.1.4 jsch:0.1.55 Jsch百度百科介紹:JSch 是SSH2的一個純Java實現。它允許你連接到一個sshd 伺服器,使用埠轉發,X11轉發,文件傳輸等等。 Jsch ...


背景:測試環境連接生產環境的資料庫,無法本地調試
環境: 
JDK8
Maven:3.6.3
Springboot:2.1.4
jsch:0.1.55

Jsch百度百科介紹:JSch 是SSH2的一個純Java實現。它允許你連接到一個sshd 伺服器,使用埠轉發,X11轉發,文件傳輸等等。 Jsch Maven依賴包: 
<!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->
<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.55</version>
</dependency>

連接配置工具類:

 1 import com.jcraft.jsch.JSch;
 2 import com.jcraft.jsch.Session;
 3 
 4 
 5 import java.util.Properties;
 6 
 7 
 8 /**
 9  * @author dcf
10  * @date 2022-09-23 17:51
11  **/
12 public class SshConnectionTool {
13     //ssh連接的用戶名
14     private final static String SSH_USER = “XXX";
15     //ssh連接的密碼
16     private final static String SSH_PASSWORD = “****";
17     //ssh遠程連接的ip地址
18     private final static String SSH_REMOTE_SERVER = “XXX.XXX.XXX.XXX";
19     //ssh連接的埠號
20     private final static int SSH_REMOTE_PORT = 22;
21     //本地mysql發起連接的資料庫IP地址
22     private final static String MYSQL_REMOTE_SERVER = "XXX.XXX.XXX.XXX";
23     //本地資料庫連接時用的埠號
24     private final static int LOCAl_PORT = 3310;
25     //遠程資料庫埠用的埠號
26     private final static int REMOTE_PORT = 3306;
27 
28 
29     private Session sesion; //ssh 會話
30 
31 
32     public void closeSSH ()
33     {
34         sesion.disconnect();
35     }
36 
37 
38     public SshConnectionTool () throws Throwable
39     {
40 
41 
42         JSch jsch = new JSch();
43 
44 
45         sesion = jsch.getSession(SSH_USER, SSH_REMOTE_SERVER, SSH_REMOTE_PORT);
46 
47 
48         sesion.setPassword(SSH_PASSWORD);
49 
50 
51         //設置連接過程不校驗known_hosts文件中的信息
52         Properties config = new Properties();
53         config.put("StrictHostKeyChecking", "no");
54         sesion.setConfig(config);
55 
56 
57         sesion.connect(); //ssh 建立連接!
58 
59 
60         //根據安全策略,您必須通過轉髮端口進行連接
61         sesion.setPortForwardingL(LOCAl_PORT, MYSQL_REMOTE_SERVER, REMOTE_PORT);
62 
63 
64     }
65 }

會話監聽類:

 1 import org.springframework.stereotype.Component;
 2 
 3 
 4 import javax.servlet.ServletContextEvent;
 5 import javax.servlet.ServletContextListener;
 6 
 7 
 8 /**
 9  * @author dcf
10  * @date 2022-09-23 17:55
11  **/
12 @Component
13 public class SshContextListener implements ServletContextListener{
14 
15 
16     private SshConnectionTool conexionssh;
17     public SshContextListener() {
18         super();
19     }
20     /**
21      * @see ServletContextListener#contextInitialized(ServletContextEvent)
22      */
23     @Override
24     public void contextInitialized(ServletContextEvent arg0) {
25         System.out.println("Context initialized ... !");
26         try {
27             conexionssh = new SshConnectionTool();
28         } catch (Throwable e) {
29             e.printStackTrace(); // 連接失敗
30         }
31     }
32 
33 
34     /**
35      * @see ServletContextListener#contextDestroyed(ServletContextEvent)
36      */
37     @Override
38     public void contextDestroyed(ServletContextEvent arg0) {
39         System.out.println("Context destroyed ... !");
40         conexionssh.closeSSH(); // 斷開連接
41     }
42 }

需要連接的mysql地址配置:

1 td-sql:
2   type: com.alibaba.druid.pool.DruidDataSource
3   driverClassName: com.mysql.cj.jdbc.Driver
4   jdbcUrl: jdbc:mysql://127.0.0.1:3310/test?allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai
5   username: name
6   password: password

註:mysql地址配置中的127.0.0.1,其實在連接配置工具類會話方法中預設的,當然裡面有多個重載方法,根據不同的重載方法進行不同的配置mysql地址和埠號

 1 public int setPortForwardingL(int lport, String host, int rport) throws JSchException {
 2     return this.setPortForwardingL("127.0.0.1", lport, host, rport);
 3 }
 4 
 5 
 6 public int setPortForwardingL(String bind_address, int lport, String host, int rport) throws JSchException {
 7     return this.setPortForwardingL(bind_address, lport, host, rport, (ServerSocketFactory)null);
 8 }
 9 
10 
11 public int setPortForwardingL(String bind_address, int lport, String host, int rport, ServerSocketFactory ssf) throws JSchException {
12     return this.setPortForwardingL(bind_address, lport, host, rport, ssf, 0);
13 }

 

友好交流,個人公眾號:

 

 

 

 

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MyBatisPlus 快速入門 1.創建資料庫mybatisplus 2.創建user表並插入數據 DROP TABLE IF EXISTS user; CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主鍵ID', name VARCHAR( ...
  • 前言 嗨嘍,大家好呀~這裡是愛看美女的茜茜吶 又到了學Python時刻~ 所以特地給大家獻上如何用Python來開發一款看視頻不需要VIP的軟體~ 如果想發給朋友用的話,咱們在打包成exe可執行軟體,這樣小伙伴也能一起用了~ 效果展示 這是本次要寫的界面 優、騰、愛三個主流的都可以,其它的我沒試,直 ...
  • 多數ARK反內核工具中都存在驅動級別的記憶體轉存功能,該功能可以將應用層中運行進程的記憶體鏡像轉存到特定目錄下,記憶體轉存功能在應對加殼程式的分析尤為重要,當進程在記憶體中解碼後,我們可以很容易的將記憶體鏡像導出,從而更好的對樣本進行分析,當然某些加密殼可能無效但絕大多數情況下是可以被轉存的。 ...
  • jpa整合mybatis模板解析、hibernate整合mybatis模板解析 jpa是hibernate的封裝,主要用於spring全家桶套餐。 hibernate難以編寫複雜的SQL。例如一個訂單查詢,查詢條件有時間緯度、用戶緯度、狀態緯度、搜> 索、分頁........... 等等。正常開發你 ...
  • 一 前期工作 環境:python3.6,1080ti,pytorch1.10(實驗室伺服器的環境😂😂) 1.設置GPU或者cpu import torch import torch.nn as nn import matplotlib.pyplot as plt import torchvisi ...
  • 1.基於 Logistic 回歸和 Sigmoid 函數的分類 邏輯回歸適合於01情況的分類就是描述一個問題是或者不是,所以就引入sigmoid函數,因為這個函數可以將所有值變成0-1之間的一個值,這樣就方便算概率 首先我們可以先看看Sigmoid函數(又叫Logistic函數)將任意的輸入映射到了 ...
  • map()函數可以對一個數據進行同等迭代操作。 例如: def f(x): return x * x r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) print(list(r)) map函數傳入的第一個參數就是函數本身,即f。第二個參數是要操作的數據 map() 作為 ...
  • 分詞高亮搜索代碼 List<A> list = new ArrayList<>(); //設置高亮顯示 HighlightBuilder highlightBuilder = new HighlightBuilder().field("*").requireFieldMatch(false); hi ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...