当前位置: 首页 > web >正文

【开发便利】让远程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.xdnf.cn/news/19056.html

相关文章:

  • 链表-25.k个一组翻转链表-力扣(LeetCode)
  • 深入解析 Flink Function
  • Vue将内容生成为二维码,并将所有二维码下载为图片,同时支持批量下载(下载为ZIP),含解决一次性生成过多时页面崩溃解决办法
  • TCP 并发服务器构建
  • 智芯MCU 勘误文档问题解析
  • 【Java知识】Java线程相关对象全面解析与最佳实践
  • 阿里云——应用交付与负载均衡
  • 数据对话的“通用语法”:SQL与KingbaseES的智能处理艺术
  • 从感知机到大模型:神经网络的全景解析与实践指南
  • ES01-环境安装
  • 盛大启幕!融智兴科技亮相 IOTE 2025 深圳国际物联网展
  • SegEarth-R1: Geospatial Pixel Reasoning via Large Language Model
  • 稀土:从“稀有”到“命脉”的科技核心
  • LeetCode算法日记 - Day 23: 外观数列、数青蛙
  • LeetCode - 155. 最小栈
  • 8.28 模拟
  • rust语言(1.88.0)sqlite数据库rusqlite库(0.37.0)学习笔记
  • 蘑兔音乐:帮你把灵感落地
  • 【新版发布】Apache DolphinScheduler 3.3.1 正式上线:更稳、更快、更安全!
  • 【Django + Pure Admin】基于Django+Vue3的前后端分离管理系统框架设计
  • 预处理详解
  • 【Spring Cloud 微服务】5.架构的智慧枢纽:深度剖析 Nacos 注册中心
  • 《Vuejs设计与实现》第 17 章(编译优化)
  • JMeter 5.3 性能测试:文件下载脚本编写与导出文件接收完整指南
  • 数据结构:堆排序 (Heap Sort)
  • spire.doc在word中生成公式
  • 设计模式理解
  • Shader开发(十七)着色器中的纹理采样与渲染
  • 农业物联网:科技赋能现代农业新篇章
  • 数模笔记day01(数据预处理、K-means聚类、遗传算法、概率密度分布)