借助代理解决github被墙

【Win10环境下】自从配置好本地Git后,一般都能够推送到GitHub,但是过段时间后(甚至不用),经常会因为一些奇怪的问题导致无法推送上去,本文尝试通过使用代理解决因为Github被墙所产生的问题。

一、什么是代理?

代理(英语:Proxy)也称网络代理,是一种特殊的网络服务,允许一个终端(一般为客户端)通过这个服务与另一个终端(一般为服务器)进行非直接的连接。源自:代理服务器 - 维基百科,自由的百科全书 (wikipedia.org)

通俗的理解就是,本来客户端是直连服务端的,现在往它们的通信线路中间插入了一个服务,这个服务将代替客户端访问服务端,同时将服务端的响应返回到客户端。

这样带来的好处就是:

  1. 能够突破某些限制,进而能够访问被过滤的网站
  2. 提高访问的速度
  3. 隐藏真实的IP
  4. 突破网站的区域限制。

为了能够使用代理,你必须手头上能够有一台服务器(该服务器能够直接访问GitHub不受限制)或者是VPN

因为VPN工具实际上已经是通过代理的方式来协助我们上网了,所以可以在Git发起SSH请求的时候通过它建立的线路来访问,这也是本文采用的方法。

二、问题描述

在这里主要是重新提一下我遇到的问题。

当我将本地提交的代码想要推送到远程仓库时,如GitHub,经常会报如下内容的错误:

1
2
3
4
kex_exchange_identification:Connectlon closed by remote host
Connection closed by 20.205.243.166 port 22
fatal: Could not read from remote repository.
please make sure you have the correct access rights

当然,遇到这个错误的时候,首先要确定你的远程仓库路径是正确的并且具备一定的访问权限,不然就不好确定是哪方面的问题了。我当时遇到这个问题的时候,也尝试了许多比较常见的方法(以关键词kex_exchange_identification:Connectlon closed by remote host进行搜索),但是没有什么用。后面甚至突然出现能够推送上去的情况,这让我联想到可能是被墙的原因导致推送并不稳定。

但是我也开了全局代理,我以为这样它就不会绕开代理了,但实际上,我在日志上并没查到有访问GitHub的日志信息,故我猜测还是需要单独设置Git走代理模式。

三、解决方案

如果没有配置Git采用SSH方式来访问GitHub的话,请配置后再按如下的方式进行设置,具体配置方式请自行百度。

前往C:\Users\your_user_name\.ssh(像我的用户名为pSomng,所以路径是C:\Users\pSomng\.ssh)目录下,找到config文件,如果没有就创建一个,然后配置如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

#这里的connetct路径是你的Git安装路径,并找到对应的connect路径 然后修改对应的端口 这里的7890 是我的VPN工具的端口号
# 这个方式将会配置全局SSH走代理的方式
# ProxyCommand "E:\SOFTWARE\Git\mingw64\bin\connect" -S 127.0.0.1:7890 -a none %h %p

Host github.com
User git
Port 22
Hostname github.com
# 修改路径为你的路径 采用私钥免密SSH
IdentityFile "C:\Users\your_user_name\.ssh\id_rsa"
# 针对访问GitHub设置代理(推荐)
ProxyCommand "E:\SOFTWARE\Git\mingw64\bin\connect" -S 127.0.0.1:7890 -a none %h %p
TCPKeepAlive yes

Host ssh.github.com
User git
Port 443
Hostname ssh.github.com
# 修改路径为你的路径 采用私钥免密SSH
IdentityFile "C:\Users\your_user_name\.ssh\id_rsa"
ProxyCommand "E:\SOFTWARE\Git\mingw64\bin\connect" -S 127.0.0.1:7890 -a none %h %p
TCPKeepAlive yes

记住要根据自己实际的参数值来实际配置上面这些参数。

里面提到的7890是我的VPN工具所采用的端口号:

然后执行下面的命令进行测试:

1
ssh -T git@github.com

如果出现下面的内容,则说明已经配置成功了

Hi xxxx! You’ve successfully authenticated, but GitHub does not provide shell access.

好了,现在就可以愉快地获取GitHub的内容、上传数据到GitHub了。

如果本文存在哪里说的不对的地方,请您指出以便于我及时更改,谢谢!

四、参考文章


借助代理解决github被墙
http://1291945816.github.io/2023/06/13/借助代理解决github被墙/
作者
Hps
发布于
2023年6月13日
更新于
2024年4月7日
许可协议