今天给自己的Ubuntu系统配置git的时候,发现没法连接Github,clone/fetch/pull此类涉及网络连接的操作都会出错,并提示”Connection closed by 20.205.243.166 port 22”。一开始以为是SSH密钥或者路由器DNS有问题,但重置了一遍后还是报错。经过查阅资料发现,可能是因为网络中的某一环(防火墙/代理服务器)屏蔽掉了22端口导致的。我们可以键入以下命令尝试是否可以通过443端口SSH连接到Github上:
ssh -T -p 443 git@ssh.github.com如果提示如下信息,说明可以通过443端口连接到Github:
Hi {Your Github Username}! You've successfully authenticated, but GitHub does not provide shell access.此时我们可以曲线救国,配置git使用443端口进行SSH连接。
具体方法是编辑~/.ssh/config文件(如果没有则新建一个),添加如下内容:
[url "ssh://git@ssh.github.com:443/"]
insteadOf = git@github.com:上述配置新增一个路径重写(URL Rewriting)规则:每当执行Git操作(如clone、push、pull)且目标地址以“git@github.com:”开头时(通过insteadOf字段指定),Git会自动将其替换为“ssh://git@ssh.github.com:443/”。比如,当你执行命令:
git clone git@github.com:owner/repo.gitGit会转换为:
git clone ssh://git@ssh.github.com:443/owner/repo.git这样就能通过443端口与Github建立SSH连接,绕过22端口被屏蔽的问题。