"Connection refused" 是什麼意思
"Connection refused" 是網路層的拒絕:你的封包到達了那臺機器(或它前面的防火牆),有個東西主動回答"這裡沒有人在聽"。它不同於 Permission denied(連上之後認證失敗),也不同於逾時(封包石沉大海——通常是 IP 錯或網路不可達)。Refused 的意思是:機器對了,但那個連接埠上沒有 SSH 服務在應答。四個原因幾乎涵蓋所有情況。
四個原因
| # | 原因 | 快速檢查 |
|---|---|---|
| 1 | SSH 服務沒在跑 | 在機器上 systemctl status ssh |
| 2 | 連接埠不對 | SSH 被挪離 22 了嗎?查連線的連接埠 |
| 3 | 防火牆主動拒絕 | ufw status / 雲端安全群組 |
| 4 | 機器不對(那個 IP 上是別的東西) | IP 變了(DHCP)?是對的機器嗎? |
1——sshd 真的在跑嗎?
在伺服器上(主控臺、web VNC、或任何別的進去方式):
sudo systemctl status ssh # Debian/Ubuntu(RHEL 上是 sshd)
sudo systemctl enable --now ssh 新裝系統是經典場景:樹莓派系統和很多精簡映像出廠時 SSH 是關閉的。啟用一次就持久了。見在樹莓派上啟用 SSH。
2——連接埠對嗎?
如果管理員把 SSH 挪離了 22 連接埠(常見的降噪做法),連 22 就會被拒。檢查連線設定裡的連接埠欄位,或從另一臺機器探測:nc -vz host 22 對比 nc -vz host 2222。
3——防火牆在拒絕
設定成拒絕(而非丟棄)的防火牆正好產生這個報錯。在機器上:sudo ufw status——你的 SSH 連接埠放行了嗎?雲端伺服器還要查服務商面板裡的安全群組/防火牆規則;在服務商層面關了 22 連接埠的 VPS,作業系統根本看不到封包就被拒了。
4——那個地址上是別的機器
家庭網路會重新分配 IP(DHCP)。如果你儲存的連線指著 192.168.1.42,而那臺機器重啟後變成了 .57,你可能正連到另一臺拒絕 22 連接埠的裝置。重查路由器的裝置清單——或者用 Tailscale 繞開整類問題:無論區域網路怎麼變,每臺機器保持一個穩定的私有地址。TermAI 內建它。見 Tailscale SSH 設定。
Refused vs 逾時 vs Permission denied
- Connection refused——機器可達,沒人在聽(本文)。
- Connection timed out——封包消失了:IP 錯、機器關了、或你在網路外面試圖連私有地址(用 Tailscale)。
- Permission denied——SSH 應答了,你的認證失敗:見 publickey 指南。
在手機上排查
這個錯在行動端的彆扭之處是:你往往沒法 SSH 進那臺機器去查它。如果同網路還有任何一臺機器可達,就借道:SSH 進它,然後 nc -vz / ping 那臺被拒的機器,看什麼連接埠真的開著。記不住診斷咒語,就把情況描述給 TermAI 的助手——"查一下 192.168.1.42 的 22 連接埠有沒有東西在聽"——在你能連上的那臺機器上執行建議的命令。
常見問題
SSH connection refused 是什麼導致的?
SSH 服務沒在跑、SSH 在別的連接埠、防火牆拒絕那個連接埠、或那個 IP 上是別的機器。這是網路層的拒絕,不是認證失敗。
它和 connection timed out 有什麼區別?
Refused = 機器回答了"這裡沒有"。Timed out = 完全沒有回答(IP 錯、主機關機、或網路不可達)。
樹莓派上的 connection refused 怎麼修?
樹莓派系統預設關閉 SSH——用 raspi-config 啟用,或在 boot 分割區放一個 ssh 檔案,之後就持久了。
快速事實
- 含義:機器可達、那個連接埠上沒人在聽(網路層,認證之前)
- 原因:sshd 沒跑 · 連接埠不對 · 防火牆拒絕 · 機器不對/IP 變了
- 檢查:機器上
systemctl status ssh;外部nc -vz host port - 避免 IP 漂移:用穩定的 Tailscale 地址代替區域網路 DHCP IP
Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.