如果你习惯用 SSH 协议而不是 HTTPS 去连接 GitHub,那么你很可能遇到过:当你 push 代码到 GitHub 的时候出现 port 22: Connection refused 的错误。大部分情况下,这是因为你所在的本地网络防火墙禁止 22 端口出站连接。事实上,对于企业网络安全而言,这么做是非常有必要的。但是,突然你就不能 push 代码了,我现在急着提交一个 hotfix,怎么办?

使用后备 Git+SSH 端口

幸运的是,常用的 Git 托管服务大多提供了通过 HTTPS 的 443 端口连接 Git+SSH 服务的功能。只需要修改你的 SSH 配置文件即可启用。

编辑 ~/.ssh/config 文件:

Host github.com
  Hostname ssh.github.com
  Port 443

Host bitbucket.org
  Hostname altssh.bitbucket.org
  Port 443

Host gitlab.com
  Hostname altssh.gitlab.com
  Port 443

使用代理服务器

如果你使用的 Git 托管服务没有提供后备 Git+SSH 端口,或者你所在的本地网络必须通过代理服务器访问外网,则可以利用 nc 来达成。例如:

Host git.somecompany.com
  ProxyCommand nc -x 10.0.146.35:3128 %h %p