github 访问三两事儿
前段时间的晚上我改了下自己开源项目的代码,准备像往常一样推送到github上时,不幸的事件发生了,代码居然无法 push,检查了下发现 github.com 的 dns 居然被解析成 127.0.0.1, 于是我开始研究如何破除这奇葩的问题,这里简单记录下。
写host
当前的这种屏蔽手段属于 dns 污染,解决此问题最简单直接的办法就是写 host 文件了, windows 下 C:\Windows\System32\drivers\etc 找到 hosts 添加如下内容
1 | 20.205.243.166 github.com |
当然这个 IP 以后可能会变,届时再做修改
转接
这是 github 官方推荐的一种解决方案,有兴趣的可以同学可以查看原文。这里简单的介绍一下。该方案使用 https 的443端口来进行通讯,在端口屏蔽时可能会有用。
测试
要测试通过 HTTPS 端口的 SSH 是否可行,请运行以下 SSH 命令:
1 | ssh -T -p 443 [email protected] |
如果出现了
1 | Hi username! You've successfully authenticated, but GitHub does not |
则表示此方案可行
配置
接着编辑 ~/.ssh/config
,并添加以下部分:
1 | Host github.com |
这样便强制 SSH 连接时使用 ssh.github.com 的 https 方式来连接
ProxyJump
据发现 dns 的污染是局部的,如果我们有未被污染的云主机的话就可以使用这种方式来规避污染,在翻阅 ssh 命令时发现了 ProxyJump
可以帮助我们避开污染,其工作原理用图表示的话大致如下
graph LR
A(本地机器) --ProxyJump--> B(中间机器)
B --Dirict--> C(github)
为实现效果,我们需要有一台中间机器,该机器可以连上 github ,接着编辑 ~/.ssh/config
,并添加以下部分:
1 | Host ProxyVps |
在以上的配置中,我们将中间机器定义为 ProxyVps 并填写相应的连接信息,这样便实现对应的连接功能
ProxyCommand
用法一
与 ProxyJump
类似在 ssh 中还提供了 ProxyCommand
用于实现代理连接,类似的可以配置如下命令:
1 | Host ProxyVps |
用法二
ProxyCommand
还可以搭配其他方式的代理进行使用,如使用 nc
, nc 的简单用法为
nc -X {代理协议} -x {代理服务IP}:{代理服务端口} {目标服务器} {目标端口}
以下为一个示例配置
1 | Host github |
该配置表示以 SOCKS5 代理协议连接 x.x.x.x:1080 的代理服务器再连接至目标的 github.com
设置代理
另外就是直接设置 git 的代理,目前用的比较少,这部分可以参考stackoverflow
写在最后
github 作为开源界的扛把子,在大力推动国产化的今天其被屏蔽也不是新鲜事,只是服务有优劣,至于用什么大家各取所需,希望对各位有所帮助。