如何解決SSH連線伺服器時發生 “Connection Refused”報錯

錯誤型別:
其他錯誤
錯誤名稱:
SSH连接被拒绝
英文名稱:
Connection Refused
錯誤描述:
不幸的是,当您尝试通过SSH连接到服务器时,可能会发生许多情况,这可能会导致显示“Connection refused(连接被拒绝)”错误。

ssh-connection-refused-1024x512-1

隨著VPS伺服器的流行,SSH也成為了站長必備的開發工具。該工具可授予高階使用者訪問關鍵平臺和軟體的許可權,使編碼和其他任務更容易,更快速且更有組織性。

如果經常使用SSH,相信對“Connection refused(連線被拒絕)”錯誤不會陌生,第一次遭遇這樣的錯誤,甚至可能會讓站長手足無措。但,這其實是一個常見問題,完全可以透過簡單的故障排除進行修復。

本文,我們將討論什麼是SSH以及何時使用它。然後,解釋一些可能導致SSH連線被拒絕的常見原因,包括在PuTTY中。最後,提供一些故障排除教程。

什麼是SSH,何時應使用它?

SSH(全稱為Secure Socket Shell)是一種用於透過不安全網路安全訪問站點伺服器的協議。換句話說,這是一種安全登入遠端伺服器及使用命令列的終端介面:

使用SSH訪問伺服器

使用SSH訪問伺服器

與僅允許您上載,刪除和編輯伺服器上的檔案FTP檔案傳輸協議不同的是,SSH可以完成各種各樣的任務。例如,如果WordPress錯誤使您無法進入網站,則可以透過SSH遠端訪問伺服器。

該協議支援使用幾個關鍵的開發人員工具,包括:

  • WP-CLI – WordPress命令列。可用於各種任務,包括新安裝,批次更新外掛和匯入媒體檔案。
  • Composer – 一個PHP軟體包管理器。有了它,你可以提取必要的庫和依賴項來編輯網站編碼時使用多個框架。
  • Git – 一個版本控制系統用於跟蹤碼的變化。這對於團隊協作專案特別有用。
  • npm – 一個JavaScript包管理器。它包括命令列和JavaScript軟體登錄檔。

請務必注意,使用SSH需要熟悉伺服器運維管理知識。不建議小白使用者直接嘗試自行解決SSH問題,應該尋求開發人員或伺服器提供商幫助。

SSH很安全高效,但也能夠讓你感受“一失足千古恨”。輸入簡單的錯誤命令可能會導致整個伺服器癱瘓,因此,瞭解自己在做什麼至關重要。

為什麼SSH連線被拒絕?

不幸的是,當您嘗試透過SSH連線到伺服器時,可能會發生許多情況,這可能會導致顯示“Connection refused(連線被拒絕)”錯誤。

以下是一些可能會給您帶來麻煩的最常見問題。

1. 原因:本地計算機上未安裝SSH客戶端

要使用 PuTTY 或類似程式建立 SSH 連線,需要兩個元件:本地計算機上的 SSH 客戶端和遠端伺服器上執行的 SSH 守護程序。SSH 客戶端啟動連線,而 SSH 守護程序則偵聽傳入的連線請求並進行驗證。

在大多數情況下,伺服器(尤其是託管 WordPress 主機)都預裝了必要的守護程式。不過,如果您使用的是專用主機,可能需要手動安裝守護程序。

安裝了守護程式後,伺服器就可以接受 SSH 連線,從而讓你可以與伺服器建立安全、經過驗證的連線。

解決方案:安裝SSH客戶端

你可以在終端視窗進行快速檢查,以確定系統上是否安裝了 SSH 客戶端。

只需鍵入 “ssh” 並點選 Enter。

如果終端顯示可用的 ssh 命令選項列表,則表明 SSH 客戶端已安裝在系統中。我的情況就是如此:

檢查SSH客戶端是否安裝

但是,如果響應是 “command not found”,則說明未安裝 SSH 客戶端,需要安裝 OpenSSH 客戶端才能啟用 SSH 功能。

要在機器上安裝 SSH 客戶端,請按照以下步驟操作:

  • 在系統上開啟終端。
  • 根據作業系統,執行以下命令之一:

對於 Ubuntu/Debian 系統:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo apt install openssh-client
sudo apt install openssh-client
sudo apt install openssh-client

對於 CentOS/RHEL 系統:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo yum install openssh-client
sudo yum install openssh-client
sudo yum install openssh-client

2. 原因:遠端伺服器上未安裝或執行SSH守護程序

如果 SSH 守護程序不可用或未執行,可能會導致與 SSH 本地主機的傳入連線受阻。

解決方法:手動安裝SSH守護程序軟體包

大多數虛擬主機公司通常會在伺服器上預裝 SSH 守護程序。不過,如果 SSH 守護程序的狀態報告為 Down,則應聯絡主機提供商解決此問題。

要檢查 SSH 守護程序的狀態,請根據系統使用以下命令之一:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo service ssh status
sudo service ssh status
sudo service ssh status

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo systemctl status sshd
sudo systemctl status sshd
sudo systemctl status sshd

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
systemctl status ssh
systemctl status ssh
systemctl status ssh

檢查 SSH 守護程序

如果您看到 active (running),如上面的截圖所示,這意味著服務處於活動狀態。

因此,要檢查 SSH 守護程序服務是否處於活動狀態,請執行此命令檢視 SSH 程序是否處於活動狀態:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ps aux | grep sshd
ps aux | grep sshd
ps aux | grep sshd

如果 SSH 正在執行,你將看到包含 sshd 行的輸出。如果沒有,則 SSH 可能已停機。

SSH 可能已停機

在管理專用伺服器或本地主機時,有必要手動安裝 SSH 守護程序軟體包。

安裝 OpenSSH 客戶端和伺服器應用程式非常簡單。要安裝 OpenSSH 伺服器應用程式和相關支援檔案,請在終端執行以下命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo apt install openssh-server
sudo apt install openssh-server
sudo apt install openssh-server

透過執行該命令,可以安裝所需的元件,以確保 SSH 守護程序正常執行並建立成功的 SSH 連線。

3. 原因:防火牆阻止SSH連線

如果出現 “SSH 連線被拒絕 ”錯誤,伺服器的防火牆很可能阻止了傳入的 SSH 連線。要解決這個問題,必須應用特定的防火牆規則,允許 SSH 連線請求。

解決方案:允許SSH連線透過防火牆

要檢查防火牆是否阻止了 SSH 埠,請使用以下命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo ufw status
sudo ufw status
sudo ufw status

該命令將顯示當前的防火牆規則。在允許的埠列表中查詢 SSH 埠(預設為 22)。如果 SSH 埠未列出,可以使用:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo ufw allow ssh
sudo ufw allow ssh
sudo ufw allow ssh

如果伺服器使用自定義 SSH 埠(如 2222),請將 ssh 替換為埠號:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo ufw allow 2222
sudo ufw allow 2222
sudo ufw allow 2222

執行命令後,防火牆將更新為允許傳入 SSH 連線。

4. 原因:SSH憑據或埠配置不正確

要建立從客戶端到伺服器的 SSH 連線,必須提供特定的憑證。如果其中任何一項設定不正確,伺服器就會發出“拒絕連線”資訊。

以下是 SSH 連線所需的詳細資訊:

  1. Hostname指伺服器的地址,可以是 IP 地址、伺服器名稱或網站域名(如果域名的 A 記錄指向伺服器)。
  2. SSH username:必須提供與網站或伺服器上 SSH 伺服器相關聯的使用者名稱。
  3. Password如果使用基於密碼的身份驗證,請確保輸入正確的密碼。如果使用的是 SSH 金鑰,密碼提示指的是私人 SSH 金鑰的口令。
  4. PortSSH 連線的預設埠是 22。不過,許多託管提供商使用自定義 SSH 埠來增強安全性。

您可以透過執行以下命令來驗證是否開啟了正確的 SSH 埠:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
grep Port /etc/ssh/sshd_config
grep Port /etc/ssh/sshd_config
grep Port /etc/ssh/sshd_config

執行此命令將顯示 SSH 所用埠號的輸出。

顯示 SSH 所用埠號

解決方案:仔細檢查輸入的證書

登入主機提供商的控制面板,確保您擁有正確的證書。查詢顯示 SSH 憑據的部分。

在輸入憑據時,務必仔細檢查並考慮可能出現的錯別字或輸入錯誤的 IP 地址或埠。注意核實憑證的準確性,確保輸入正確。

5. 原因:SSH服務未執行或需要重啟

解決 SSH“拒絕連線”錯誤的另一個辦法是重啟 SSH 服務。

解決方案:重啟SSH服務

要重啟 SSH 服務,請使用以下命令之一:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo service ssh restart
sudo service ssh restart
sudo service ssh restart

或者

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo systemctl restart sshd
sudo systemctl restart sshd
sudo systemctl restart sshd

該命令將重新啟動 SSH 服務。此操作可讓 SSH 服務重新啟動,從而解決任何潛在問題並建立成功的 SSH 連線。

任何妨礙 SSH 連線的潛在問題或故障都可以透過重啟 SSH 服務來解決。

注意: sudo service ssh restart 命令可能無法在所有系統上執行。有些系統使用 systemctl。

6. 原因:SSH訪問已停用

在某些情況下,伺服器上可能安裝了 SSH 守護程序,但出於安全原因被停用。如果 SSH 訪問被停用,伺服器將拒絕接受 SSH 連線請求。

解決方案:啟用SSH訪問

要啟用 SSH 訪問,請使用以下命令啟動 SSH 服務:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo service ssh start
sudo service ssh start
sudo service ssh start

如果命令執行無誤,說明 SSH 服務已成功啟動。如果服務已在執行,該命令不會做任何更改。

您也可以使用以下命令啟用 SSH 服務,使其在系統啟動時自動啟動:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo systemctl enable ssh
sudo systemctl enable ssh
sudo systemctl enable ssh

這可確保 SSH 在伺服器重啟後仍處於活動狀態。

7. 原因:SSH埠已關閉

SSH 連線依賴特定埠(預設為 22)與伺服器通訊。如果該埠關閉,伺服器將拒絕 SSH 連線請求。

解決方案:開啟SSH埠

1. 檢查SSH埠是否開啟

要檢查 SSH 埠是否處於開啟和監聽狀態,請執行

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo lsof -i:22
sudo lsof -i:22
sudo lsof -i:22

如果輸出結果的 STATE(狀態)欄下包含 LISTEN(連線),則表示埠已開啟。否則,您需要開啟它。

注意:

有些伺服器上,lsof -i:22 等 sudo 命令受到限制。請使用

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
netstat -tnl | grep :22
netstat -tnl | grep :22
netstat -tnl | grep :22

在我的案例中,輸出結果顯示 SSH 正在執行,並主動監聽 IPv4(0.0.0.0:22)和 IPv6(:::22)的 22 埠。

netstat -tnl | grep :22

如果沒有輸出,說明埠 22 已關閉。

2. 驗證SSH埠配置

要檢查 SSH 使用的埠,請執行

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
grep Port /etc/ssh/sshd_config
grep Port /etc/ssh/sshd_config
grep Port /etc/ssh/sshd_config

如果埠被註釋(#埠 22)或更改(如埠 2222),請編輯配置檔案:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo nano /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
  • 取消埠一行的註釋(#埠 22 → 埠 22)
  • 如果需要其他埠,請相應更新
  • 儲存並退出(CTRL + X,然後 Y,然後 Enter)
3. 重啟SSH服務

更新埠後,重啟 SSH 服務:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo service ssh restart
sudo service ssh restart
sudo service ssh restart

或者

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo systemctl restart ssh
sudo systemctl restart ssh
sudo systemctl restart ssh
4. 在防火牆中開啟SSH埠

如果 SSH 因防火牆規則而被阻止,請允許埠 22 的流量:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo ufw allow 22
sudo ufw allow 22
sudo ufw allow 22

為什麼PuTTY連線被拒絕?

PuTTY是一款最受歡迎的SSH客戶端,幫助站長在SSH協議下安全地連線並管理伺服器。與PuTTY相似的另一個客戶端是Xshell。

PuTTY下載頁面

PuTTY下載頁面

如果在使用PuTTY連線伺服器時出現“Connection refused(連線被拒絕)”錯誤,則可能是上面列出的原因之一。

這是SSH連線錯誤,無論您使用的是PuTTY,終端還是其他任何透過SSH連線到伺服器的軟體。

如何解決SSH連線錯誤?

遇到SSH連線錯誤時,根據原因可以採取一些步驟來進行故障排除。以下是一些技巧,希望能夠幫助你解決“Connection refused(連線被拒絕)”錯誤:

  • 如果是SSH服務已關閉。 請與您的主機提供商聯絡,以瞭解為什麼您的SSH服務未執行。對於localhost或專用伺服器,您可以使用命令  sudo service ssh restart 嘗試使其再次執行。
  • 如果是輸入了錯誤SSH憑據。 使用grep Port /etc/ssh/sshd_config 命令仔細檢查SSH埠後  ,請嘗試使用正確的詳細資訊再次連線。
  • 如果是SSH埠已關閉。 在要連線的伺服器上安裝SSH daemon,或更改防火牆規則以接受到SSH埠的連線。
  • 如果是伺服器未安裝SSH。 使用命令sudo apt install openssh-server在要連線的伺服器上安裝SSH工具(例如OpenSSH)。
  • 如果是防火牆攔截SSH連線。  透過將目標埠的設定更改為ACCEPT來停用防火牆規則阻止SSH連線。

如果你使用的伺服器提供技術支援,不妨直接與技術人員聯絡,比起嘗試自行解決問題可能更明智。如果上述解決方案均無效,則可以這方面技術比較靠譜的人員協助,或者透過網際網路找找看是否有應對的措施。

您是否透過SSH收到“Connection refused(連線被拒絕)”錯誤?藉助此指南,瞭解為什麼發生這種情況以及如何解決SSH連線錯誤。

SSH故障排除的其他技巧和最佳實踐

既然我們已經瞭解了一些問題和解決 SSH“拒絕連線”錯誤的方法,下面就讓我們來探討 SSH 故障排除的其他技巧和最佳實踐。

1. 探索SSH除錯和日誌記錄技巧

在 Linux 中,你可以使用“verbose”或“debugging”模式來分析 SSH 問題。啟用該模式後,SSH 可以顯示詳細的除錯資訊,幫助排除連線、配置和身份驗證問題。

有三個級別的冗長度可供選擇:

第 1 級 (-v): 要啟用該級別,可以在使用 ssh 命令訪問遠端伺服器時新增選項 -v。例如

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ssh -v [server_ip]
ssh -v [server_ip]
ssh -v [server_ip]

第 2 級 (-vv): 該級別提供更高的冗餘級別。可以使用 -vv 選項啟用它:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ssh -vv [server_ip]
ssh -vv [server_ip]
ssh -vv [server_ip]

第 3 級 (-vvv): 該級別提供最高的冗餘級別,並提供最詳細的除錯資訊。要啟用它,可以使用 -vvv 選項:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ssh -vvv [server_ip]
ssh -vvv [server_ip]
ssh -vvv [server_ip]

透過使用所需的冗餘級別執行 SSH 命令,可以深入瞭解 SSH 連線過程中出現的任何問題。

除了冗餘模式,你還可以使用另一種方法,透過檢查系統日誌來診斷 SSH 問題。

Linux 發行版通常會在 /var/log/auth.log/var/log/secure 等檔案中儲存 SSH 相關日誌。你可以檢查這些日誌中與 SSH 連線相關的任何錯誤資訊或警告。

透過使用“verbose”模式和檢視系統日誌,你可以更好地瞭解 SSH 問題,並有效地排除故障。

2. 實施SSH安全措施

實施適當的安全措施對於保護 SSH 連線和確保系統完整性至關重要。

請考慮以下做法:

  1. 停用 SSH 密碼驗證:使用基於 SSH 金鑰的身份驗證,而不是依賴密碼。這種方法透過使用公鑰對和私鑰對提供更強的安全性。
  2. 設定強大的密碼/口令:如果仍使用密碼驗證,請確保為 SSH 賬戶設定強大、唯一的密碼或口令。使用大小寫字母、數字和特殊字元的組合。
  3. 限制 SSH 訪問:限制只有授權使用者才能訪問 SSH。定期檢查和更新允許的使用者列表,最大限度地減少潛在漏洞。
  4. 將 SSH 配置為使用非預設埠:將預設 SSH 埠(22)更改為不同的非標準埠,有助於減少自動掃描嘗試和針對 SSH 的潛在攻擊。
  5. 利用防火牆規則:配置防火牆規則,只允許來自受信任 IP 地址或網路範圍的 SSH 連線。這樣可以透過限制 SSH 訪問特定來源來增加額外的保護層。
  6. 停用 SSH 根登入:禁止透過 SSH 直接登入 root。取而代之的是使用普通使用者賬戶,並在必要時使用 sudo 命令切換到 root 使用者。這樣可以防止針對 root 賬戶的未經授權的訪問嘗試。
  7. 定期檢視 SSH 日誌:監控並檢視 SSH 日誌,以發現可疑活動或登入嘗試失敗。不尋常或重複失敗的登入嘗試可能表明存在暴力或其他惡意活動。

3. 定期更新和維護SSH元件

定期更新和維護 SSH 元件對於保持系統安全和最新狀態至關重要。

請考慮以下做法:

  1. 更新 SSH 軟體:使用最新版本的 SSH 軟體,包括客戶端和伺服器元件。定期更新系統的 SSH 軟體包或軟體,以便從安全補丁和漏洞修復中獲益。
  2. 啟用自動更新:配置系統,以便在有更新時自動更新 SSH 軟體。這樣可以確保及時安裝重要的安全補丁。
  3. 定期檢查 SSH 配置:定期檢查和稽覈 SSH 配置,包括 SSH 伺服器設定和客戶端配置,確保它們符合安全要求和最佳實踐。
  4. 備份 SSH 配置和金鑰:定期備份 SSH 配置和金鑰檔案。這有助於防止 SSH 設定意外丟失或損壞,並確保在需要時可以恢復。
  5. 監控 SSH 供應商公告:隨時瞭解 SSH 軟體供應商或發行版的安全公告和通知。訂閱相關的安全郵件列表或關注官方渠道,及時接收有關漏洞和補丁的資訊。

透過實施這些 SSH 安全實踐並保持定期更新和維護,可以增強 SSH 連線的安全性和穩定性,降低潛在風險。

在進行 SSH 故障排除時,你可能還會遇到與網站或網路應用程式有關的問題。要了解有關解決常見網站問題的更多資訊,請檢視我們的綜合指南:如何解決常見的 WordPress 問題。本資源將幫助您識別和解決在維護和管理 WordPress 網站過程中可能出現的各種問題。

小結

在許多情況下,使用SSH連線伺服器很方便。尤其是當您無法訪問WordPress儀表盤,你還可以透過WP-CLI執行命令,使用Git跟蹤站點程式碼的更改,以恢復站點訪問。

解決“SSH 連線被拒絕”錯誤對於建立對 WordPress 網站的安全遠端訪問至關重要。在本故障排除指南中,我們探討了導致該錯誤的常見原因,並提供了實用的解決方法。

瞭解根本原因(如 SSH 客戶端丟失、防火牆阻塞、憑據或埠配置不正確以及 SSH 服務問題)後,你就能有效地排除故障並解決該錯誤。

只要按照概述的方法逐步操作,包括安裝/配置 SSH 客戶端、確保 SSH 守護程序的存在、解決防火牆問題、驗證憑證和埠配置以及重啟/啟用 SSH 服務,就能克服這些挑戰,成功建立與 WordPress 網站的 SSH 連線。

相關閱讀:《站長必藏:26個Linux伺服器管理常用SSH命令列

評論留言

脣槍舌劍 (5)

  • SUN的頭像

    SUN

    2023.3.16 10:03

    谢谢大佬指点,启动服务就好了
    systemctl start ssh.service

    回覆
  • 江圳一的頭像

    江圳一

    2022.12.8 19:12

    找不到指定文件怎么办?

    回覆
    • WBOLT_COM

      2022.12.8 22:12

      找不到什么指定文件?

  • xiaohuolong的頭像

    xiaohuolong

    2022.2.16 18:02

    求问为什么所有代码我再mac里都找不到command

    回覆
    • WBOLT_COM

      2022.2.17 12:02

      环境没配置好?