如何解决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

      环境没配置好?