文章目錄
- 前言
- 1. 生成并上傳 SSH Key
- 2. 寫 SSH 配置,強制走 ssh.github.com:443
- 3. 連通性自檢(看是否能握手成功)
- 4. 克隆
- 5. 驗證
前言
今天和往常一樣,寫完代碼,準備 push
到 github
倉庫中,結果發現一直卡在 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。
如下所示:
把公鑰粘到 GitHub
→ Settings
→ SSH and GPG keys
,然后選擇添加 SSH keys
2. 寫 SSH 配置,強制走 ssh.github.com:443
命令如下:
mkdir -p ~/.sshchmod 700 ~/.sshcat > ~/.ssh/config <<'EOF'
Host github.comHostName ssh.github.comPort 443User gitIdentityFile ~/.ssh/id_ed25519ServerAliveInterval 30ServerAliveCountMax 6
EOFchmod 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
,可以看到已經完美解決了