CH-J Server Manager透過 SSH 管理伺服器
選單
所有指南與文章 →

伺服器在線上,但 SSH 連接埠 22 沒有回應

依序檢查用戶端、網路、防火牆和 sshd,找出伺服器有回應但 SSH 沒有回應的原因。

直接測試連接埠

ping 有回覆或網站正常運作,並不能說明 SSH 的狀態,因為它們各自使用不同的通訊協定或連接埠。請從用戶端直接測試 TCP 連接埠。Connection refused 表示有收到回應,但沒有服務接受連線。逾時表示完全沒有回應,通常指向防火牆、路由或機器負載過高的問題。

nc -vz -w 5 server.example 22
ssh -v -o ConnectTimeout=5 user@server.example

Connection refused:透過主控台檢查 sshd

請使用供應商或 Hypervisor 的主控台,而非 SSH。檢查服務是否執行、接聽的位址和連接埠,以及設定是否有效。較新的 Ubuntu 版本透過 ssh.socket 啟動 SSH,因此也要檢查通訊端單元。其他散佈版可能將服務命名為 sshd。

sudo systemctl status ssh.service ssh.socket
sudo ss -lntp | grep -E ':22\b|sshd'
sudo sshd -t
sudo journalctl -u ssh -n 50 --no-pager

逾時:檢查防火牆

檢查伺服器上的防火牆,以及伺服器外部的所有過濾機制,例如雲端安全群組、路由器或供應商控制面板。若要確認封包是否抵達,請在嘗試連線時於伺服器上執行 tcpdump。若完全看不到封包,阻擋發生在抵達伺服器之前。若封包有抵達卻沒有回覆送出,請在伺服器上尋找原因。

sudo ufw status verbose
sudo nft list ruleset | less
sudo tcpdump -ni any tcp port 22

遭 fail2ban 封鎖或連接埠已變更

登入失敗後,fail2ban 可能封鎖了你的位址,表現為只有從你的位址連線時才逾時或遭拒。從其他網路測試即可快速判斷。也要檢查是否用 Port 變更了連接埠,或用 ListenAddress 將接聽範圍限制為單一位址;這些設定可能位於 sshd_config 或下列目錄中的檔案:/etc/ssh/sshd_config.d.

sudo fail2ban-client status sshd
sudo sshd -T | grep -E '^(port|listenaddress) '

連接埠連線成功,但登入停滯

若 TCP 連線成功,卻始終收不到 SSH 起始識別訊息,表示 sshd 僅部分運作,或系統負載過高。請透過主控台查看記憶體、磁碟空間和負載。磁碟已滿或記憶體耗盡可能使新工作階段無法建立,而既有服務仍持續回應。

uptime
free -h
df -h

使用 CH-J Server Manager 檢查

Server Diagnostics 可在不登入的情況下,針對 IPv4 和 IPv6 測試 ping、TCP 連線和 SSH 識別字串,讓你看出哪個階段失敗。它僅從你的電腦進行測試,無法查看伺服器內部,也無法指出哪個防火牆丟棄了封包,因此上述檢查仍需要主控台。

詳細文件

OpenSSH: sshd →

man: ss →

生物辨識解除鎖定與安全性 →