【开发便利】让远程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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;析构函数会被触发。但需注意&#…