一張表看懂 SSH 排錯
幾乎所有 SSH 故障都落在三類裡——連線建不起來、認證被拒、工作階段斷開。最快的修法是讀準確的報錯、跳到它的原因。本頁是所有常見 SSH 報錯的地圖:每個是什麼意思、用哪篇專文修。
按症狀診斷
| 你看到的報錯 | 通常意味著 | 修法 |
|---|---|---|
Connection refused | 機器可達,那個連接埠上沒人在聽 | Connection refused → |
Connection timed out | 完全沒回應——IP 錯、主機關了、或從外部連私有位址 | Timed out → |
Connection closed by remote host | 伺服器接受後又斷開——常是 fail2ban 封禁 | Closed by remote → |
Permission denied (publickey) | 伺服器拒絕認證——金鑰/使用者名稱/權限 | Permission denied → |
Too many authentication failures | 用戶端遞了太多金鑰,對的那把沒輪到 | Too many auth → |
UNPROTECTED PRIVATE KEY FILE | 金鑰檔案能被他人讀——SSH 忽略它 | Unprotected key → |
Host key verification failed | 伺服器身份金鑰比上次變了 | Host key changed → |
no matching host key type found | 新用戶端 vs 舊伺服器——演算法不匹配 | No matching host key → |
Broken pipe / client_loop | 閒置連線被斷,或網路變了 | Broken pipe → |
連線層報錯(連不上)
這些發生在認證之前——問題在網路路徑,不是憑證。三者很好區分:
- Connection refused——機器回答"這裡沒人在聽"。sshd 沒跑、連接埠錯、或防火牆拒絕。
- Connection timed out——完全沒回應。IP 錯/變了、主機睡了、或從外部連私有區域網路位址(行動端頭號原因)。
- Connection closed by remote host——它接受了,然後掛斷。通常是失敗登入後被 fail2ban 封,或 sshd 過載。
認證層報錯(連上了但拒絕你)
連線通了;伺服器不接受你的憑證。
- Permission denied (publickey)——萬能錯:使用者名稱錯、沒遞金鑰、金鑰不在
authorized_keys、或權限不對。 - Too many authentication failures——用戶端金鑰太多,在對的那把之前燒光了伺服器的限額。用
IdentitiesOnly修。 - UNPROTECTED PRIVATE KEY FILE——你的私鑰全員可讀,SSH 忽略它。一條
chmod 600。
主機金鑰與演算法報錯
- Host key verification failed——伺服器身份金鑰和你固定的那把不一致。通常是重裝或 IP 複用;接受前先核實。
- no matching host key type found——新用戶端拒絕了舊伺服器的舊演算法(
ssh-rsa)。按主機限定一個相容選項。
工作階段與其它報錯
- Broken pipe / client_loop: send disconnect——連線死了,通常是 NAT 閒置丟棄或網路變化。保活能修。
- 沒法"SSH 進"Docker 容器?——別這麼做;SSH 到主機再
docker exec。
在手機上排錯
SSH 報錯在行動端的難點是讀冗長輸出、記診斷命令。只要你有任何能用的工作階段,選中報錯問助理——TermAI 的 AI 讀真實報錯和你的伺服器脈絡,告訴你是哪個原因,並給出確認和修復的確切命令。
常見問題
怎麼排查 SSH 連線?
讀準確的報錯並歸類:連線層(refused/timed-out/closed)是網路或伺服器問題;認證層(permission denied/too many auth)是憑證;主機金鑰錯是身份或演算法不匹配。然後按那個報錯的專文修。
refused、timed out、closed 有什麼區別?
Refused = 沒人在聽。Timed out = 完全沒回應。Closed by remote host = 應答了然後把你斷開(常是封禁)。
為什麼 SSH 在家能用、行動數據下不行?
你多半在連一個家外不存在的私有區域網路位址——用 Tailscale 拿穩定位址。見 timed out。
SSH 報錯記在伺服器哪裡?/var/log/auth.log(Debian/Ubuntu)或 journalctl -u ssh——多數認證和連線拒絕它都寫明真實原因。
快速事實
- 三大類:連線層(refused/timed-out/closed)、認證層(permission denied/too many auth/unprotected key)、主機金鑰/演算法
- 區分連線錯:refused = 沒人聽 · timed out = 沒回應 · closed = 應答後斷開
- 伺服器端真相:
/var/log/auth.log或journalctl -u ssh - 行動端:選中報錯,讓 AI 歸類並修復
Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.