如何修复SSH连接被拒绝错误?
引言
SSH是一种加密网络协议,广泛用于安全数据通信、远程shell服务或命令行界面访问计算机。SSH取代了较旧且安全性较低的telnet协议,成为远程shell访问的首选方法。
SSH为在不安全网络(如互联网)上进行通信期间的数据机密性、完整性和真实性提供强大的加密和身份验证功能。SSH已成为系统管理员、开发人员、网络工程师和需要远程安全管理或访问计算资源的爱好者的必备工具。
令人恐惧的SSH连接被拒绝错误
尝试与远程计算机建立SSH连接时,经常会遇到错误。“连接被拒绝”是最令人沮丧的错误之一,当您的客户端由于各种原因无法与服务器连接时,就会发生这种情况。
错误消息表明您的客户端能够与服务器通信,但无法在指定的端口(通常为22)上建立连接。“连接被拒绝”错误可能表示客户端软件配置存在问题,或者服务器端存在问题,例如防火墙设置阻止传入流量或登录凭据不正确。
SSH连接被拒绝错误的常见原因
防火墙设置阻止连接
遇到“SSH连接被拒绝”错误的最常见原因之一是防火墙设置。防火墙旨在根据特定规则阻止或允许传入和传出的网络流量。如果防火墙配置不当,它可能会阻止传入的SSH连接,从而导致“连接被拒绝”错误消息。
要检查防火墙是否导致此错误,您必须确保它允许通过端口22(SSH的默认端口)进行传入连接。此外,可能需要在防火墙配置设置中添加例外,以允许来自特定IP地址的SSH连接。
登录凭据或权限不正确
此错误消息的另一个常见原因是登录凭据不正确或服务器上的权限不正确。如果在身份验证检查期间提供了不正确的用户名或密码,服务器可能会拒绝访问。此外,如果远程服务器帐户上的用户权限配置不正确,则您在尝试通过SSH连接时可能会遇到问题。
服务器上未运行SSH服务
您可以通过登录远程系统并在终端窗口中键入“systemctl status sshd”命令来检查sshd是否正在运行。如果状态显示为inactive (dead),则使用“systemctl start sshd”命令启动进程;否则,需要进一步排查其他问题。
systemctl status sshd
检查防火墙设置
SSH连接被拒绝错误的最常见原因之一是防火墙阻止连接。要解决此问题,您应首先检查您的本地计算机和您尝试连接到的服务器上是否启用了任何防火墙。
如果启用了防火墙,则它很可能正在阻止传入连接并导致SSH连接被拒绝错误。如果没有防火墙或防火墙已禁用,则应验证端口22(SSH的默认端口)是否打开。
如果它已关闭,则会阻止建立传入连接。您可以使用端口扫描工具(例如nmap)来检查端口22是打开还是关闭。
验证登录凭据和权限
如果防火墙设置没有问题,但您仍然无法建立SSH连接,则可能是由于登录凭据或权限不正确。首先,通过准确地将它们重新输入到两个字段中来仔细检查您的用户名和密码详细信息是否正确。
还值得验证您的帐户是否有权访问该机器上的ssh。您可能还需要在连接的两端具有管理员权限——如果不确定权限是否已正确授予,请联系管理任一端的人员。
重新启动SSH服务
另一个故障排除步骤是重新启动您的SSH服务。这可以帮助解决可能阻止服务正确运行的任何问题。
执行此操作的过程可能因您的操作系统而异,但通常涉及停止和启动服务器上的服务。您通常可以使用命令行工具(例如systemctl或service)来执行此操作。
重新启动后,检查服务状态和日志中是否存在可能最初导致问题的任何错误。这些日志通常可以提供其他诊断信息,可以帮助查明连接问题。
高级故障排除技术
使用备用端口进行SSH连接
虽然SSH服务通常在端口22上运行,但可以将其默认端口更改为不同的数字。这在端口22被防火墙或其他网络限制阻止的情况下非常有用。但是,更改端口需要更新服务器和客户端两端的配置文件。
要更改默认端口,您必须首先访问位于`/etc/ssh/sshd_config`的服务器配置文件。在此文件中,找到并使用所需的数字更新`Port`行。
保存后,使用`sudo systemctl restart sshd.service`(对于基于Linux的系统)或`sudo service sshd restart`(对于macOS系统)重新启动SSH服务。在对服务器端配置文件进行这些更改后,更新客户端端配置以反映这些更改。
sudo systemctl restart sshd.service sudo service sshd restart
需要注意的是,使用非标准端口可以通过模糊安全性提供一定程度的安全性,但切勿将其依赖为唯一的安全方法。如果未以其他方式正确保护,攻击者仍然可以扫描开放端口,并最终找到您的备用SSH端口。
为身份验证目的生成新的密钥
连接到SSH服务器时,SSH密钥用于身份验证目的。这些密钥成对出现:一个私钥存储在您计算机的本地,另一个公钥存储在您要连接到的远程服务器上。
如果任一密钥被泄露,则应尽快生成新的密钥。生成新密钥的过程包括创建一个新的密钥对并在两端使用各自的密钥进行更新。
在Linux系统上,这可以通过在终端中运行`ssh-keygen`来完成。按照提示操作,询问您希望将新的密钥对存储在哪里,以及是否希望与您的私钥关联密码。
ssh-keygen
生成新的密钥对后,将新的公钥上传到位于`~/.ssh/authorized_keys`的服务器的`authorized_keys`文件中。然后,更新客户端配置文件以包含新的私钥。
这可以通过添加以下行来完成:`IdentityFile /path/to/new/private/key`。通过生成一组新的SSH密钥并在连接的两端更新它们,您可以确保没有未经授权的人员可以通过旧密钥访问您的服务器。
结论
在本指南中,我们探讨了SSH连接被拒绝错误、其常见原因以及如何在服务器上对其进行故障排除。我们概述了错误最常见的原因,包括防火墙设置阻止连接、登录凭据或权限不正确以及服务器上未运行SSH服务。
我们还提供了详细的步骤来解决每个问题。要解决防火墙问题,可以检查已启用的防火墙、打开端口22(SSH的默认端口)并添加例外以允许传入连接。
为了验证登录凭据和权限,用户应验证其用户名和密码是否正确,并检查服务器上的用户权限。重新启动SSH服务可以帮助解决SSH连接被拒绝错误。