前言

今天和往常一样,写完代码,准备 pushgithub 仓库中,结果发现一直卡在 push 页面的,如下所示:

[edison@vm-centos:~/edison]$ git push 
^C

后面排查了各种原因,发现原来是:

 GitHub 的 443/TCP 建连超时(curl、telnet 都卡住)

然后查找了网上所有的解决方法,大多数给的方法是:重新设置代理,或者关闭代码,或者去服务器官网开放 443 端口之类的…

但是我都试过了,还是不行,所以我这里推荐:改走 SSH over 443,该方法不依赖国内镜像,也不需要本机代理,成功率高。

1. 生成并上传 SSH Key

命令如下:

ssh-keygen -t ed25519 -C "your_email@example.com"

cat ~/.ssh/id_ed25519.pub

注意:ed25519 是一种 SSH 公钥算法,GitHub 官方文档推荐优先使用 Ed25519。

如下所示:

在这里插入图片描述

把公钥粘到 GitHubSettingsSSH and GPG keys,然后选择添加 SSH keys

在这里插入图片描述

2. 写 SSH 配置,强制走 ssh.github.com:443

命令如下:

mkdir -p ~/.ssh

chmod 700 ~/.ssh

cat > ~/.ssh/config <<'EOF'
Host github.com
  HostName ssh.github.com
  Port 443
  User git
  IdentityFile ~/.ssh/id_ed25519
  ServerAliveInterval 30
  ServerAliveCountMax 6
EOF

chmod 600 ~/.ssh/config

如下所示:

在这里插入图片描述

3. 连通性自检(看是否能握手成功)

命令如下:

ssh -T git@github.com    # 首次会提示 host key,输入 yes

若看到 “Hi <username>! You've successfully authenticated…”,说明通了。

在这里插入图片描述

如果第 3 步卡住:

  • 先确认没有残留代理:env | grep -i proxy(有就 unset)。
unset http_proxy https_proxy all_proxy
git config --global --unset http.proxy
git config --global --unset https.proxy
  • 测试 TCP:timeout 5 bash -c 'cat < /dev/null > /dev/tcp/ssh.github.com/443' && echo OK || echo FAIL
  • 输出 OK 表示 443 到 ssh.github.com 通,继续按下步骤操作。

4. 克隆

走 SSH 方式

git clone git@github.com:youername/yourRepository.git

克隆成功

在这里插入图片描述

5. 验证

此时我们在 git push,可以看到已经完美解决了

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐