为无法连外网的远程服务器配置 GitHub 代理访问
问题背景
在用实验室的服务器时,发现最近服务器网络限制又加强了,我想git个代码都不行xd:该服务器可以通过 SSH 连接,但完全没有外网访问权限(无法访问互联网)。
此时面临以下具体问题:
- 无法拉取代码:无法连接 GitHub,无论是 HTTPS 协议还是 SSH 协议均连接超时。
- 工具缺失且无法安装:常规的 SSH 代理方案依赖
netcat (nc)工具,但服务器上并未预装该工具。 - 包管理器不可用:由于没有网络,无法执行
sudo apt-get install来安装nc,导致陷入了“无法联网下载工具来解决联网问题”的依赖循环。
本文将记录如何利用 VS Code 的远程端口转发功能,解决 apt 联网问题并安装必要依赖,最终实现 GitHub 的 SSH 稳定访问。
解决方案概述
- 建立隧道:利用 VS Code 的 SSH Remote Forwarding 功能,将本地开发机的代理端口映射至远程服务器。
- 解决依赖:通过命令行参数临时指定代理,使
apt能够联网并安装netcat。 - 配置代理:修改服务器的 SSH 配置,利用
netcat和转发端口建立通往 GitHub 的 SSH 连接。
第一步:配置 SSH 远程端口转发
首先需要将本地计算机(具有互联网访问权限)的代理端口(用了梯__子)共享给远程服务器。
假设本地代理软件监听端口为 7890。
- 在 VS Code 中打开命令面板 (
Ctrl+Shift+P/F1)。 - 输入
Remote-SSH: Open SSH Configuration File,选择本地的 SSH 配置文件。 - 在对应的远程服务器配置块中,添加
RemoteForward参数:
Host my-remote-serverHostName xx.xx.x.xUser myname# 格式:RemoteForward [远程端口] [本地IP:本地端口]RemoteForward 7890 127.0.0.1:7890
配置保存后,重启 VS Code 窗口以重新建立连接,使端口转发生效。
第二步:临时配置 apt 代理并安装 netcat
连接到服务器后,虽然端口已映射,但系统命令默认不会使用该端口。为了安装构建 SSH 代理所需的 netcat 工具,我们需要让 apt 临时通过隧道访问网络。
在远程终端执行以下命令(通过 -o 参数指定代理配置,无需修改系统全局文件):
# 更新软件源
sudo apt -o Acquire::http::Proxy="http://127.0.0.1:7890" update# 安装 netcat (nc)
sudo apt -o Acquire::http::Proxy="http://127.0.0.1:7890" install netcat-openbsd
注:若使用 CentOS/RHEL 系统,对应的命令为 yum。
执行完毕后,netcat 即可成功安装。
第三步:配置 GitHub 访问协议
尝试 HTTPS 协议(存在性能瓶颈)
最初尝试直接配置 Git 的 HTTP 代理:
git config --global http.proxy http://127.0.0.1:7890
虽然能够连接,但在实际测试中发现 HTTPS 协议克隆大仓库时速度较慢,且连接稳定性不如 SSH 协议。因此决定转向 SSH 协议方案。
配置 SSH 协议代理(最终方案)
利用已安装的 netcat,我们可以配置标准的 SSH ProxyCommand。
-
在远程服务器上编辑 SSH 配置文件:
nano ~/.ssh/config -
添加以下配置内容:
Host github.comUser gitHostname github.com# 使用 netcat 通过 SOCKS5 协议转发流量# -X 5 代表 SOCKS5 协议# -x 127.0.0.1:7890 为第一步中映射的端口ProxyCommand nc -X 5 -x 127.0.0.1:7890 %h %p(如果你的代理不支持 socks5,就把 -X 5 去掉,只写 ProxyCommand nc -x 127.0.0.1:7890 %h %p 默认通常走 HTTP 隧道)
-
保存并退出。
第四步:验证连接
配置完成后,在远程服务器终端进行连接测试:
ssh -T git@github.com
如果返回如下信息,则说明配置成功:
Hi username! You've successfully authenticated...
至此,服务器已具备了通过 SSH 协议高速访问 GitHub 的能力,且整个过程无需为服务器开通公网权限,保证了环境的安全性。