【開發便利】讓遠程Linux服務器能夠訪問內網git倉庫

打通網絡壁壘:本地Windows直連內網Git的遠程開發終極指南

場景痛點

開發主力是一臺云端的 Linux 服務器,代碼卻存放在無法被公網訪問的公司內網 Git 倉庫中。

本文利用 Windows 電腦作為“網絡橋梁”,搭建一條能自動重連的 SSH 隧道,解決遠程開發中的網絡隔離問題。

核心思路

利用 Windows 電腦作為跳板,建立一個從它到遠程 Linux 服務器的反向 SSH 隧道。當遠程服務器訪問自己的某個端口時,流量會被加密傳輸回你的 Windows 電腦,再由你的電腦轉發至內網的 Git 服務器,從而打通網絡壁壘。

數據流向
[遠程Linux服務器] -> [SSH隧道] -> [你的Windows電腦] -> [公司內網Git服務器]


1. 配置SSH密鑰

1.1 在本地 Windows 電腦上生成 SSH 密鑰

打開 PowerShell,執行以下命令。如果 C:\Users\你的用戶名\.ssh\ 目錄下已有 id_rsaid_rsa.pub 文件,可跳過此步。

# -N "" 表示創建一個沒有密碼的密鑰,這對于自動化腳本至關重要
ssh-keygen -t rsa -b 4096 -N "" -f C:\Users\[你的用戶名]\.ssh\id_rsa
  • 這會生成一個沒有密碼的私鑰 (id_rsa) 和公鑰 (id_rsa.pub)。
1.2 在遠程 Linux 服務器上生成 SSH 密鑰

登錄你的遠程 Linux 服務器,執行相同操作。如果 /root/.ssh/ (或 ~/.ssh/) 目錄下已有密鑰,可跳過。

# -N "" 創建一個沒有密碼的密鑰
ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa
1.3 【關鍵】將公鑰添加到內網 Git 平臺
  1. 添加你的 Windows 電腦公鑰

    • 在 Windows PowerShell 中,獲取公鑰內容:cat C:\Users\[你的用戶名]\.ssh\id_rsa.pub
    • 復制輸出的全部內容。
    • 登錄你的內網 Git 平臺(如 GitLab, Gitea, Gogs),進入 “個人設置” -> “SSH 密鑰” 頁面,將復制的公鑰添加進去。
  2. 添加你的遠程 Linux 服務器公鑰

    • 在遠程 Linux 服務器上,獲取公鑰內容:cat ~/.ssh/id_rsa.pub
    • 復制輸出內容,用同樣的方式,將其也添加到內網 Git 平臺的 SSH 密鑰列表中。

:為何要添加兩個公鑰?我們最終的隧道方案會讓認證請求回退到 Windows 電腦來處理,因此 Windows 的公鑰是必須的。但為了覆蓋所有情況并確保 git 命令在服務器上總能找到一個有效的身份,將服務器自身的公鑰也添加進去是最為穩妥的做法。


2. 從 Windows 免密登錄遠程服務器

為了讓我們的隧道腳本能自動運行,必須讓 Windows 電腦能無需密碼地登錄到遠程 Linux 服務器。

  1. Windows PowerShell 中,使用 ssh-copy-id 命令將你的 Windows 公鑰 傳送到遠程服務器。

    # 將 user 和 110.40.228.116 替換為你的實際信息
    ssh-copy-id root@110.40.218.106
    
    • 這個過程會要求你輸入一次遠程服務器的登錄密碼。
  2. 測試免密登錄。完成后,嘗試再次登錄,如果直接進入服務器而沒有提示輸入密碼,則配置成功。

    ssh root@110.40.228.116
    

測試
windows執行命令:

# 命令格式: ssh -fN -A -R <遠程監聽端口>:<目標內網IP>:<目標內網端口> <user>@<遠程服務器IP>
ssh -fN -A -R 2222:192.168.222.54:22 user@110.40.218.106

然后登錄遠程服務器,使用git clone一個倉庫,測試是否連通。

 git clone ssh://git@localhost:2222/倉庫名.git

如果成功則正確

3. 創建輕量級持久化隧道

我們將使用一個“批處理腳本 + VBS啟動器”的組合,實現一個無需安裝任何軟件、雙擊即可在后臺運行、且能自動重連的 SSH 隧道。

3.1 編寫“連接與重連”腳本 (start_tunnel.bat)

在你的 Windows 電腦上(例如桌面)創建一個名為 start_tunnel.bat 的文件,內容如下:

@echo off
rem 設置窗口標題,方便在任務管理器中識別
title SSH Tunnel Connector:loop
echo [%time%] 啟動SSH隧道連接...
rem --- 核心SSH命令,請確保-i后面的密鑰路徑正確 ---
ssh.exe -N -i "C:\Users\[你的用戶名]\.ssh\id_rsa" -R 2222:192.168.222.54:22 root@110.40.218.106 -o ServerAliveInterval=15 -o ServerAliveCountMax=3 -o ExitOnForwardFailure=yesecho [%time%] SSH連接已斷開,將在10秒后重連...
rem 等待10秒,防止因連接問題過于頻繁地重試
timeout /t 10 /nobreakgoto loop
  • 【必須修改】: 將 C:\Users\[你的用戶名]\.ssh\id_rsa 替換為第一步中你 Windows 電腦私鑰的準確路徑
  • 【必須修改】: 將 192.168.222.54 替換為你內網 Git 服務器的 IP 地址
  • 【必須修改】: 將 root@110.40.218.106 替換為你遠程 Linux 服務器的用戶名和 IP 地址
3.2 編寫“后臺隱藏運行”啟動器 (run_in_background.vbs)

在與 start_tunnel.bat 相同的文件夾里,再創建一個名為 run_in_background.vbs 的文件,內容如下:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "C:\Users\[你的用戶名]\Desktop\start_tunnel.bat", 0, False
  • 【必須修改】: 將 C:\Users\[你的用戶名]\Desktop\start_tunnel.bat 替換為你上一步創建的 start_tunnel.bat 文件的絕對完整路徑
3.3 使用隧道
  • 啟動:雙擊 run_in_background.vbs 文件。隧道將在后臺無窗口運行。
  • 停止:打開任務管理器 (Ctrl+Shift+Esc) -> “詳細信息”,結束 ssh.exe 進程。

4. 遠程開發 - 在服務器上配置 Git

隧道已經聯通,現在我們可以在遠程服務器上享受開發的樂趣了。

  1. 通過你喜歡的方式(VSCode Remote, JetBrains Gateway, …)連接到你的遠程 Linux 服務器。
  2. 打開服務器的終端。
4.1 克隆新倉庫

使用 localhost 和隧道端口 2222 來代替內網 Git 服務器的 IP 地址。

# 原命令: git clone git@192.168.222.54:path/to/repo.git
# 新命令:
git clone ssh://git@localhost:2222/path/to/repo.git
  • 注意:協議頭 git@ 換成了 ssh://git@,IP 地址后的冒號 : 換成了斜杠 /git 是你在 Git 平臺上的用戶名。

最后,加班寫博客的我祝大家編碼愉快!

或者可以使用autossh實現鏈接的穩定,這個比簡單的腳本更好。
可以參考:https://wzx046.github.io/post/70/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94636.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94636.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94636.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32學習日記

ADCADC簡介ADC(Analog-Digital Converter)模擬-數字轉換器ADC可以將引腳上連續變化的模擬電壓轉換為內存中存儲的數字變量&#xff0c;建立模擬電路到數字電路的橋梁12位逐次逼近型ADC&#xff0c;1us轉換時間輸入電壓范圍&#xff1a;0~3.3V&#xff0c;轉換結果范圍&#xff…

文生3D實戰:用[靈龍AI API]玩轉AI 3D模型 – 第7篇

在前幾篇文章中&#xff0c;我們已經體驗了文生視頻、圖生視頻、文生圖、圖生圖、AI翻唱 等功能。本篇將進入更高階的領域 —— 文生3D。借助 [靈龍AI API]&#xff0c;你不僅能生成靜態的 3D模型&#xff0c;還可以快速產出 場景、角色、動畫&#xff0c;為游戲開發、虛擬人、…

林粒粒視頻筆記4-numpy

需要先安裝2個庫&#xff0c;一個是代碼運行平臺&#xff1a;pip3 install notebook還有一個numpy&#xff1a;pip3 install numpy1、在cmd運行環境>>jupyter notebook&#xff0c;瀏覽器自動打開頁面如下&#xff1a;2、創建一個一維數組和二維數據3、分別打印這2個數組…

Hadoop MapReduce 任務/輸入數據 分片 InputSplit 解析

InputSplitInputSplit 是對 MapReduce 作業輸入數據的一種邏輯劃分。它并不直接包含數據本身&#xff0c;而是包含了處理一小塊數據所需的信息&#xff0c;比如數據的位置、起始點和長度。框架會為每個 InputSplit 創建一個 Mapper 任務。從InputSplit.java 的注釋中我們可以得…

【力扣】面試經典150題總結04-區間/棧

1.匯總區間&#xff08;簡單&#xff09;判斷連續的范圍&#xff0c;記錄每個區間的首尾&#xff0c;存進list。2.合并區間&#xff08;中等&#xff09;先按照左端點排序&#xff0c;然后判斷右端點是否和下個區間的左端點重合&#xff0c;重疊進行合并。3.插入區間&#xff0…

SpringBoot 常用跨域處理方案

1.什么是跨域&#xff1f; 跨域是瀏覽器為了保障安全而遵循的一種規則&#xff0c;是同源策略的一部分。 同源&#xff1a;要求協議、域名、端口三者完全相同。 跨域&#xff1a;只要協議、域名、端口中有任何一個不同&#xff0c;瀏覽器就會判定為跨域請求。 跨域&#xf…

Springboot框架的“上海迪士尼”旅游管理網站設計與開發(代碼+數據庫+LW)

摘 要 隨著旅游行業的不斷發展&#xff0c;特別是主題公園的快速增長&#xff0c;如何通過現代信息技術提升旅游服務質量與管理效率成為了行業的重要課題。上海迪士尼作為中國乃至全球知名的主題公園&#xff0c;其旅游管理網站的設計與開發&#xff0c;不只需要滿足游客對信…

后臺管理系統-16-vue3之動態路由的實現

文章目錄 1 動態路由 1.1 stores/index.js(動態添加路由函數) 1.1.1 獲取菜單數據 1.1.2 動態導入組件 1.1.3 處理菜單項 1.1.4 添加路由 1.1.5 整體代碼 1.2 router/index.js(移除子路由) 1.3 Login.vue(登錄頁面) 2 多賬號bug問題 2.1 問題復現 2.2 解決多賬號路由問題(store…

社群團購平臺與定制開發開源AI智能名片S2B2C商城小程序的融合創新研究

摘要&#xff1a;本文聚焦于社群團購平臺這一在移動互聯網背景下興起的電子商務運營機構&#xff0c;深入剖析其依托移動互聯網滿足消費者多元購物需求的特點。同時&#xff0c;引入定制開發開源AI智能名片S2B2C商城小程序這一關鍵元素&#xff0c;探討二者融合所帶來的創新模式…

模型交互中的會話狀態管理實踐

模型交互中的會話狀態管理實踐 目錄 引言會話狀態的手動管理構建多輪對話消息序列追加歷史響應實現上下文共享API支持的自動會話狀態管理利用 previous_response_id 實現線程式對話模型響應數據保存與計費說明上下文窗口管理與令牌限制令牌計算與窗口溢出風險令牌工具輔助統計…

基于Java+Springboot的船舶運維系統

源碼編號&#xff1a;sy23源碼名稱&#xff1a;基于Springboot的船舶運維系統用戶類型&#xff1a;多角色&#xff0c;船員、維修人員、管理員數據庫表數量&#xff1a;9 張表主要技術&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven運行環境&#xff1a;Windows/Mac、J…

零基礎也能照做的WordPress網站安全漏洞修復 + 高級優化保姆級教程。

建議先在**暫存環境&#xff08;Staging&#xff09;**演練后再動正式站&#xff0c;避免線上故障。下面第一部分就教你“備份暫存還原演練”。 總覽導航&#xff08;按順序完成&#xff09; 備份與還原演練&#xff08;UpdraftPlus 寶塔/阿里/騰訊/七牛&#xff09;高危加固…

HI3516DV500/HI3519DV500 Docker開發環境配置

目錄一、拉取Ubuntu 18.04 docker鏡像二、查看已有鏡像三、基于鏡像創建容器1. 創建容器2. 退出容器3. 查看容器4. 啟動容器5. 進入容器6. 更新容器內部軟件源四、安裝CANN包1. 安裝基礎依賴環境2. 安裝并配置python 3.7.5配置環境變量安裝vim添加使環境變量生效檢查python版本…

實體店轉型破局之道:新零售社區商城小程序開發重構經營生態

在數字化浪潮的席卷下&#xff0c;實體店經營正經歷著前所未有的變革與挑戰。客戶進店率持續走低、同行競爭白熱化、經營成本不斷攀升、電商平臺沖擊加劇……這些痛點如同達摩克利斯之劍&#xff0c;懸在傳統實體商家的頭頂。然而&#xff0c;危機往往與機遇并存&#xff0c;新…

前端-如何將前端頁面輸出為PDF并打包的壓縮包中

需要引入的依賴&#xff1a;import * as utils from ../../utils/utils import html2canvas from "html2canvas"; import JSZip from "jszip"; import JSPDF from "jspdf"; import FileSaver from "file-saver"import { Loading } fro…

LabVIEW 頻譜分析應用

LabVIEW 頻譜分析程序廣泛應用于聲學、振動、電力電子等領域&#xff0c;用于噪聲頻譜分析、設備故障診斷、電能質量評估等。通過模塊化 VI 組合&#xff0c;可快速搭建 "信號模擬 - 采集&#xff08;或緩存&#xff09;- 頻譜分析 - 結果展示" 完整流程&#xff0c;…

北斗導航 | 基于MCMC粒子濾波的接收機自主完好性監測(RAIM)算法(附matlab代碼)

詳細闡述基于MCMC粒子濾波的接收機自主完好性監測(RAIM)算法的原理、理論和實現方法,并提供完整的MATLAB代碼示例。 1. 原理與理論 1.1 接收機自主完好性監測 (RAIM) 簡介 RAIM是一種完全由GPS接收機內部實現的算法,用于在不依賴外部系統的情況下,監測GPS信號的完好性(…

【機器學習】4 Gaussian models

本章目錄 4 Gaussian models 97 4.1 Introduction 97 4.1.1 Notation 97 4.1.2 Basics 97 4.1.3 MLE for an MVN 99 4.1.4 Maximum entropy derivation of the Gaussian * 101 4.2 Gaussian discriminant analysis 101 4.2.1 Quadratic discriminant analysis (QDA) 102 4.2.2…

Ruoyi-Vue 靜態資源權限鑒權:非登錄不可訪問

一. 背景 移除/profile下靜態資源訪問權限后&#xff0c;富文本等組件中的圖片加載失敗!!! 使用ruoyi-vue3.8.9過程中發現上傳的在ruoyi.profile下的文件未登錄直接使用鏈接就可以訪問下載&#xff0c;感覺這樣不太安全&#xff0c;所以想對其進行鑒權限制&#xff0c;修改為只…

關于窗口關閉釋放內存,主窗口下的子窗口關閉釋放不用等到主窗口關閉>setAttribute(Qt::WA_DeleteOnClose);而且無需手動釋放

?QWidget重寫closeEvent后&#xff0c;點擊關閉時釋放內存會調用析構函數?&#xff0c;但需注意內存釋放的時機和方式。 關閉事件與析構函數的關系 重寫closeEvent時&#xff0c;若在事件處理中調用deleteLater()或手動刪除對象&#xff0c;析構函數會被觸發。但需注意&#…