您鬆了一口氣,因為 QA 已批准在 Prod 上部署一項期待已久的功能。然而,作為該流程的一部分,它首先部署在 UAT 環境上,其中有測試帳戶可用於驗證該功能在本地開發人員和 QA 測試系統之外的工作情況。
但是...執行測試套件會導致很多失敗!
回覆總是相關的「但它可以在我的機器上運行!」
你是做什麼的?您確信程式碼可以工作。絕對確定。也許是 UAT 環境的問題?但環境可能會出現什麼問題呢?也許新建立的測試帳戶配置不正確?也許是的,你想。您可以存取環境的日誌,但失敗的場景僅限於沒有日誌來識別問題。你內心咒罵你祖先的開發者。
另一個選擇?遠端調試!雖然這是一個好主意,但對於經常使用應用程式的環境來說,它很少實用。如果您的程式碼位於「熱路徑」中,那麼祝您好運,弄清楚您的請求是什麼。它還可能會顯著減慢應用程式的速度。
本質上,你想要的是調試應用程序,就像它部署在你的本地機器上一樣,但是UAT伺服器的資料庫。但由於本地應用程式無法直接訪問 UAT 伺服器,所以你運氣不好。
或者你是嗎?不用擔心,因為 SSH 隧道可以幫助您。
SSH 隧道
什麼是 SSH 隧道?以及如何使用它?
簡短回答:
SSH 隧道將允許您的應用程式表現得就像部署在遠端系統上一樣,透過該系統可以存取 UAT 資料庫。
長答:
Linux ssh 指令提供了「連接埠轉送」功能。誠然,「連接埠轉送」這個詞相當不具描述性。因此,我將讓 StackOverflow 為您提供比我在這裡提供的更詳細、更簡單的 SSH 隧道解釋。您可以在這裡閱讀:https://unix.stackexchange.com/a/115906。我建議您閱讀答案,因為它的圖表比基於文字的答案更容易理解。
不過,我還是將相關部分複製到這裡。
ssh -L 123:farawayhost:456 remotehostlocal: -L 指定本機(客戶端)主機上的給定連接埠將轉送到遠端的給定主機和連接埠。
ssh -L sourcePort:forwardToHost:onPort connectToHost 意思是:使用ssh 連接到connectToHost,並將所有連接嘗試轉送到local sourcePort 到名為forwardToHost 的機器上的on 端口,可以是從connectToHost 機器到達。
例子
對於我們的用例,我們的範例命令將是:
ssh -L <local port>:<uat database ip>:<uat database port> <jumphost ip> </jumphost></uat></uat></local>
注意,這裡的JumpHost是一個可以連接到
一旦我們弄清楚了這一點,其他一切都是小菜一碟!
您只需執行指令,就可以存取本機上的 UAT 資料庫:。感覺就像魔法一樣!
如果需要連接多個資料庫,則需要多次執行此命令。或者您可以編寫一個 bash 腳本,該腳本可以動態讀取設定檔以開啟多個 SSH 隧道。
身為 Java 程式設計師,我寧願處理靜態編譯的 Java 程式碼,也不願擔心像 bash 這樣的動態型別語言。因此,我利用 jsch 庫創建了一個可擴展項目,該項目創建並維護多個 SSH 隧道。您可以在這裡查看:https://github.com/darshitpp/java-ssh-tunnel
結構
java-ssh-tunnel └── src └── main ├── java │ └── dev │ └── darshit │ └── java_ssh_tunnel │ ├── Main.java │ ├── MultiTunneler.java │ ├── Tunneler.java │ └── ssh │ ├── TunnelDetails.java │ └── UserDetails.java └── resources
用法
- 下載項目
- 在您的 IDE 中載入
- 運行 mvn clean install
- 使用 SSH 使用者名稱、SSH 密碼、JumpHost sshHost 等所需詳細資訊來變更 Main.java
- (可選)也許從檔案載入 localPort、remoteHost 和 remotePort 詳細資料
- 運行Main.java
如果一切順利,您將在標準輸出上看到以下輸出
Starting tunneling... <remotehost>:<remoteport> is available on localhost:<localport> Press Enter to terminate the tunnels... </localport></remoteport></remotehost>
注意事項
雖然上述非常方便,請勿使用它連接到 PROD。是的,必須用粗體寫出來並強調。我也應該將訊息列印到 stderr 嗎?請在下面評論。
以上是使用 Java 進行 SSH 隧道的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

WebStorm Mac版
好用的JavaScript開發工具

Dreamweaver CS6
視覺化網頁開發工具