---
title: "Mac 上的 SSH 和 git push 逾時：原因與解決方法 · Kilobat 指南"
url: "https://kilobat.app/zh-hant/guides/ssh-git-timeouts.html"
description: "修正卡住或逾時的 SSH 和 Git 連線：測試連接埠 22、對 GitHub 改用經由連接埠 443 的 SSH、設定 keepalive，並檢查 IPv6 和代理伺服器。"
---

開發者

# Mac 上的 SSH 和 Git 逾時

SSH 和 Git 需要與伺服器之間有正常的 TCP 連線。封鎖連接埠 22 的網路、故障的 IPv6 路徑或代理伺服器，都可能讓它們連不上。

適用於：所有目前的 macOS 版本，搭配 macOS 或 Homebrew 安裝的 OpenSSH 和 Git。 · 檢查日期：2026年10月29日

## 症狀

- `git push` 或 `git clone` 一直等待，然後顯示「Operation timed out」。
- `ssh` 在某個網路上顯示「Connection timed out」，換到另一個網路卻正常。
- SSH 工作階段閒置幾分鐘後就凍結。
- HTTPS 的 Git 遠端可以用，SSH 遠端卻不行。

## 可能原因

- **連接埠 22 被封鎖。**有些公司、飯店和公共網路會封鎖 SSH。GitHub 表示，防火牆有時會拒絕 SSH 連線。
- **IPv6 路徑故障。**Mac 會先嘗試 IPv6。如果 IPv6 無法運作，連線就會一直等待。
- **閒置連線被關閉。**路由器或防火牆可能會中斷一段時間沒有傳送資料的連線。
- **需要代理伺服器。**在公司網路上，HTTPS 的 Git 可能需要 `http.proxy` 或代理伺服器環境變數。

## 如何檢查

1. 以詳細輸出模式連線。最後幾行會顯示連線停在哪裡。

   ```
   ssh -vT git@github.com
   ```
2. 單獨測試 TCP 連接埠，逾時設為 5 秒。

   ```
   nc -vz -G 5 github.com 22
   ```
3. 只試 IPv4。如果這樣可以連線，問題就出在 IPv6 路徑。

   ```
   ssh -4 -T git@github.com
   ```
4. 測試 GitHub 在連接埠 443 上的 SSH 服務。

   ```
   ssh -T -p 443 git@ssh.github.com
   ```
5. 顯示 Git 的代理伺服器設定和你的代理伺服器環境變數。

   ```
   git config --get http.proxy
   env | grep -i proxy
   ```

## 如何修正

1. 如果連接埠 22 被封鎖，對 GitHub 改用經由連接埠 443 的 SSH。將這個區塊加入 `~/.ssh/config`。

   ```
   Host github.com
       Hostname ssh.github.com
       Port 443
       User git
   ```
2. 如果 IPv6 失敗，對該主機改用 IPv4。在 `~/.ssh/config` 中該主機的區塊加入 `AddressFamily inet`。
3. 若要讓閒置的工作階段保持開啟，每 60 秒傳送一次訊息。在主機區塊中加入 `ServerAliveInterval 60`。
4. 若要避免長時間等待，在主機區塊中加入 `ConnectTimeout 10`。
5. 如果 HTTPS 遠端位於代理伺服器後方，請設定 Git 的代理伺服器。

   ```
   git config --global http.proxy http://proxy.example.com:8080
   ```
6. 作為測試，改用儲存庫的 HTTPS URL，而不是 SSH URL。

## 使用 Kilobat

1. Kilobat 的連線檢查會分別測試 IPv4 和 IPv6，所以 IPv6 路徑故障時也能得到明確的答案。

   ```
   kilobat why github.com
   ```
2. 查看單一處理程序開啟中的連線。

   ```
   kilobat destinations --pid 12345
   ```

## 常見問題

**為什麼 ssh -4 可以連線，一般的 ssh 卻不行？**

Mac 先嘗試了 IPv6，而 IPv6 路徑無法運作。使用 `-4` 時，ssh 只會使用 IPv4。

**ServerAliveInterval 有什麼作用？**

連線經過這麼多秒都沒有資料時，ssh 會透過連線傳送一則訊息。預設值為 0，也就是不傳送。

## 資料來源

- [GitHub Docs：Using SSH over the HTTPS port](https://docs.github.com/en/authentication/troubleshooting-ssh/using-ssh-over-the-https-port)
- ssh(1) 與 ssh_config(5)，macOS 27.2 內建的 man 頁面
- nc(1)，macOS 27.2 內建的 man 頁面
- git-config(1)，http.proxy，macOS 27.2 內建的 man 手冊頁（Git 2.56）

資料來源檢查日期：2026年10月29日。man 頁面為 macOS 內建版本；在終端機中用 `man <name>` 開啟。

## 相關指南

- [Mac 上的 IPv6 問題](https://kilobat.app/zh-hant/guides/ipv6-problems-mac.html): 大多數網路都會同時提供 IPv4 和 IPv6 位址給 Mac。
- [公司代理伺服器憑證導致 Mac 上的終端機工具失效](https://kilobat.app/zh-hant/guides/corporate-proxy-certificates.html): 有些公司網路會檢查 HTTPS 流量。
- [Mac 上的 Homebrew 或 npm 下載失敗](https://kilobat.app/zh-hant/guides/homebrew-npm-download-fails.html): Homebrew 使用 curl 和 Git 下載。
- [找出某個網站或 API 連不上的原因](https://kilobat.app/zh-hant/guides/recipes/why-cant-it-connect.html): 網路正常、只有某個位址失敗時，Kilobat 會逐層檢查。
- [Mac 上的 ssh: connect to host port 22: Operation timed out](https://kilobat.app/zh-hant/guides/ssh-port-22-operation-timed-out.html): ssh 向連接埠 22 送出連線請求，卻沒有收到回應。
