如何排除 Linux SSH 無法連線?完整排錯教學

如何排除 Linux SSH 無法連線?完整排錯教學

SSH 是 Linux 系統最常用的遠端管理方式,但新手經常遇到 Connection refused、Permission denied、Port 22 阻擋、防火牆設定或 SSH Key 權限錯誤等問題。本文提供完整排錯步驟,包含實務案例與回應範例,並詳細解釋每個指令結果,讓新手能自行演練與理解 SSH 連線問題。

SSH 基本概念與連線流程

SSH(Secure Shell)是一種加密的遠端登入協定,通常透過 TCP Port 22 與伺服器建立安全連線。連線流程包含四個步驟:
1. Client 發起連線請求
2. Server 回應 SSH daemon
3. Client 驗證身份(密碼或 SSH Key)
4. 建立加密通道完成登入
若任何一環節失敗,將導致無法連線,常見錯誤包括 Connection refused、Permission denied、Timeout、No route to host 等。

SSH 連線排錯步驟與指令

可使用以下方式測試 SSH 連線問題,並查看回應以判斷問題原因:

測試方式指令範例備註
確認 SSH 服務狀態
systemctl status sshd
systemctl start sshd
systemctl enable sshd
確認 sshd 是否啟動,未啟動會顯示 inactive
檢查 Port 22 是否監聽
ss -tlnp | grep ssh
netstat -tlnp | grep ssh
顯示 sshd 是否監聽 0.0.0.0:22
UFW 防火牆開放 SSH
ufw status
ufw allow ssh
檢查防火牆是否允許 Port 22
firewalld 防火牆開放 SSH
firewall-cmd --list-all
firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload
更新 firewalld 規則後需 reload
測試 Port 是否開啟
telnet server-ip 22
nc -zv server-ip 22
回應 Connection refused 或成功可判斷是否可達
檢查 SSH Key 權限
ls -l ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
權限不正確會導致 Permission denied
查看 SSH Log
# Ubuntu / Debian
tail -f /var/log/auth.log
# CentOS / RHEL
tail -f /var/log/secure
可查看連線被拒原因,如密碼錯誤或 Fail2ban 封鎖
檢查 SELinux 狀態
getenforce
若 Enforcing,可能封鎖 SSH,必要時調整 policy
Client 端連線測試
ssh -v user@server-ip
可查看連線流程與失敗原因

實務案例與終端回應範例

# 案例一:SSH 服務未啟動
systemctl status sshd
# 回應:
# ● sshd.service - OpenSSH server daemon
#    Loaded: loaded (/lib/systemd/system/sshd.service; disabled)
#    Active: inactive (dead)
# 解釋: sshd 沒有啟動,需 systemctl start sshd

# 案例二:Port 22 被防火牆阻擋
nc -zv server-ip 22
# 回應:
# nc: connect to server-ip port 22 (tcp) failed: Connection refused
# 解釋: 防火牆或服務未監聽,需開放防火牆或啟動 sshd

# 案例三:密碼或 SSH Key 驗證失敗
ssh user@server-ip
# 回應:
# Permission denied (publickey,password)
# 解釋: 密碼或 Key 錯誤,檢查帳號、密碼或 authorized_keys

# 案例四:SSH 設定檔錯誤
vim /etc/ssh/sshd_config
# 將 Port 改為非 22,未 restart sshd
ssh user@server-ip -p 22
# 回應:
# ssh: connect to host server-ip port 22: Connection refused
# 解釋: 設定檔改動需重新啟動 sshd

# 案例五:IP 被 Fail2ban 封鎖
fail2ban-client status sshd
# 回應:
# Status for the jail: sshd
#   Banned IP list: your-ip
# 解釋: IP 被封鎖,需要解除封鎖或等待 timeout

FAQ 常見問題

SSH 出現 Connection refused 是什麼原因?

通常是 SSH 服務未啟動或 Port 22 被防火牆阻擋,使用 systemctl status sshd 或 nc -zv server-ip 22 可確認服務與網路狀態。

SSH 出現 Permission denied 怎麼辦?

身份驗證失敗,可能密碼或 SSH Key 錯誤,確認帳號正確,檢查 ~/.ssh/authorized_keys 與檔案權限。

SSH 連線很慢怎麼解決?

可在 /etc/ssh/sshd_config 關閉 DNS 解析:UseDNS no,避免延遲,也可確認網路穩定性。

SSH Key 權限不正確怎麼辦?

私鑰檔案權限需 chmod 600 ~/.ssh/id_rsa,否則 SSH 會拒絕連線,顯示 Permission denied。

SELinux 封鎖 SSH 如何處理?

使用 getenforce 查看狀態,若 Enforcing 可調整 policy 或暫時關閉,以允許 SSH 連線。

Fail2ban 封鎖 IP 怎麼解決?

查看 fail2ban-client status sshd,若 IP 在封鎖列表,可解除封鎖或等待 timeout,避免連線被拒。

    PAGE TOP