如何修復 Linux 上的 SSH“連接被拒絕”錯誤

如何修復 Linux 上的 SSH“連接被拒絕”錯誤

SSH 是一種網絡協議,允許您通過網絡安全地訪問和管理遠程系統。通過 SSH 連接到遠程計算機時,您可能會遇到“連接被拒絕”錯誤。遇到這個問題可能會令人沮喪,尤其是當您是系統管理員並且必須緊急在遠程系統上執行某些任務時。

讓我們看一下導致 SSH“連接被拒絕”錯誤的一些可能原因以及解決它的方法。

1.檢查是否安裝了SSH服務器

“連接被拒絕”錯誤的一個可能原因是遠程機器沒有運行 SSH 服務器。如果沒有 SSH 服務器,機器將不會接受傳入的 SSH 連接,您將無法遠程訪問它。

因此,排除錯誤的第一步是檢查遠程計算機上是否安裝了 SSH 服務器。使用以下命令驗證 SSH 服務器安裝:

在基於 Debian 的發行版上:

dpkg --list | grep ssh

在基於 RHEL 的發行版上:

yum list installed | grep ssh

在 openSUSE 上:

zypper search -i | grep ssh

在基於 Arch 的發行版上:

pacman -Q | grep ssh

如果 SSH 服務器安裝在遠程機器上,您將看到它列在輸出中。否則,您必須在要通過 SSH 訪問的遠程計算機上安裝 OpenSSH 服務器。OpenSSH 是用於遠程訪問和控制系統的 SSH 工具的開源版本。

要安裝 OpenSSH 服務器,請使用以下命令:

在基於 Debian 的發行版上:

sudo apt install openssh-server

在基於 RHEL 的發行版上:

sudo yum install openssh-server

在 openSUSE 上:

sudo zypper install openssh

在基於 Arch 的發行版上:

pacman -S openssh

2.查看SSH服務狀態

出現“連接被拒絕”錯誤的另一個原因可能是 SSH 服務被禁用或未在遠程計算機上運行。一旦確定安裝了 SSH 服務器,您需要檢查的第二件事就是服務器的狀態。

sudo systemctl status sshd

如果服務已啟動並正在運行,輸出將指示它為active (running)。否則,您會看到類似inactive (dead)的內容。

SSH 服務器的狀態

如果 SSH 服務器未運行,您可以使用以下命令手動啟動它:

sudo systemctl start sshd

您還可以啟用該服務以在啟動時自動啟動:

sudo systemctl enable sshd

3.檢查SSH端口

默認情況下,SSH 服務器在端口 22 上運行。但是,可以更改默認端口。因此,如果您收到 SSH“連接被拒絕”錯誤,可能是因為您試圖連接到默認端口 22 上的 SSH 服務器,而它正在其他端口上運行。

您可以使用帶有 grep 的 netstat 命令來查找 SSH 服務器正在偵聽的端口:

sudo netstat -plntu | grep ssh

檢查ssh端口

您還可以使用以下命令從sshd_config文件中找到 SSH 端口:

grep port /etc/ssh/sshd_config

確定正確的 SSH 端口後,嘗試使用該特定端口連接到您的遠程系統。

4. 檢查你的系統防火牆

大多數連接問題的發生是由於您機器的防火牆阻止了某些端口或服務。如果遠程機器安裝並運行了 SSH 服務器,下一步就是檢查你的防火牆。

要弄清楚防火牆是否阻止了連接,請使用以下命令暫時禁用防火牆:

在 Debian 和基於 Arch 的 Linux 發行版上:

sudo ufw disable

在基於 RHEL 的發行版和 openSUSE 上:

sudo systemctl disable firewalld

如果禁用防火牆後錯誤沒有出現,則表示防火牆阻止了連接。在這種情況下,重新啟用防火牆並添加允許 SSH 的規則。

在 Debian 和基於 Arch 的 Linux 發行版上,使用以下命令在 UFW 防火牆中允許 SSH:

sudo ufw allow ssh

或者,您也可以通過防火牆中的端口號允許 SSH。假設 SSH 服務器正在使用端口 5555,那麼您將使用以下命令在防火牆中允許它:

sudo ufw allow 5555

要驗證規則是否已成功添加,請檢查 UFW 狀態:

sudo ufw status

在基於 RHEL 的發行版和 openSUSE 上,使用以下命令在防火牆中允許 SSH:

sudo firewall-cmd --permanent --add-service=ssh

要通過端口號允許 SSH,請使用以下命令:

sudo firewall-cmd --permanent --add-port={port}/tcp

對於在端口 4444 上運行的 SSH 服務器,命令為:

sudo firewall-cmd --permanent --add-port=4444/tcp

要驗證是否在防火牆中成功添加了規則,請運行:

sudo firewall-cmd --list-all

5.解決IP地址衝突

由於 SSH 服務器 IP 與網絡中另一個系統的 IP 衝突,也有可能發生 SSH“連接被拒絕”錯誤。當網絡上的兩個系統聲稱具有相同的 IP 地址時,就會發生這種情況,從而導致 IP 衝突。

要確認您的網絡是否存在 IP 衝突,請使用 arp-scan 工具,如下所示:

arp-scan [network-id]

如果存在 IP 衝突,您將在輸出中看到重複的 IP 地址。以下屏幕截圖是網絡中 IP 衝突的示例:

使用 arp-scan 查找重複的 ip

為避免 IP 衝突,請確保沒有設備具有與 DHCP 池地址重疊的靜態 IP 地址。

額外提示:以詳細模式運行 SSH

每當您遇到 SSH 錯誤時,請嘗試在詳細模式下運行 ssh 命令以追踪問題。要在詳細模式下運行 SSH,請使用帶有-vvv選項的 ssh 命令,如下所示:

ssh -vvv username@ip_address

ssh 調試

在詳細模式下,您將在連接的每個步驟中看到調試消息,這將幫助您了解問題所在。

排除 Linux 上的 SSH“連接被拒絕”錯誤

通過確定 SSH 連接錯誤的潛在原因並實施建議的解決方案,您將能夠排除故障並解決 SSH“連接被拒絕”錯誤。除了這些步驟之外,請確保您連接到正確的 IP 地址並使用正確的登錄憑據。

為了使您的遠程連接更加安全,您可以在 Linux 上為 SSH 設置雙因素身份驗證。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *