ssh 远程服务器密码失效如何解决

8月 04, 202420 mins read

遇到SSH远程服务器密码失效问题?学习如何解决SSH密码过期、重置或恢复的方法。确保远程访问安全,提升服务器管理效率,避免因密码问题导致的访问限制。

在现代网络中,SSH(Secure Shell)协议被广泛应用于远程登录和管理服务器。然而,有时候我们可能会遇到SSH服务器拒绝密码的情况,这通常是由于配置问题、权限问题或安全策略导致的。当这种情况发生时,我们该如何解决呢?下面是一些可能帮助您解决问题的步骤。

一、检查SSH配置文件

首先,您需要检查SSH服务器的配置文件。在大多数Linux系统中,SSH配置文件通常位于/etc/ssh/sshd_config。您可以使用任何文本编辑器打开此文件,并检查以下设置:

  1. PasswordAuthentication:此设置控制是否允许使用密码进行身份验证。确保它设置为"yes"。

  2. PermitRootLogin:对于root用户,此设置控制是否允许使用密码或密钥进行登录。如果需要允许root用户使用密码登录,请将其设置为"yes"。

  3. PasswordAuthentication:确保此设置已启用(设置为"yes")。

  4. RSAAuthentication:如果您的SSH服务器使用RSA密钥进行身份验证,请确保此设置已启用(设置为"yes")。

保存更改后,重新启动SSH服务以使更改生效。在大多数Linux系统上,您可以使用以下命令重新启动SSH服务:

sudo service ssh restart

或者

sudo systemctl restart sshd

二、检查用户权限

如果SSH服务器配置正确但仍拒绝密码,则可能是由于用户权限问题。请确保您尝试登录的用户的权限正确。在Linux系统中,每个用户都属于一个或多个用户组。您需要确保用户具有正确的权限和所属组。

您可以尝试使用id命令来检查用户权限:

id yourusername

这将显示您所属的用户组和权限信息。如果用户不属于适当的用户组或没有足够的权限,您可能需要联系系统管理员或检查您的账户设置。

三、检查防火墙和安全组规则

有时,防火墙或安全组规则可能会阻止SSH连接。请确保您的防火墙或安全组规则允许SSH连接。如果您使用的是UFW(Uncomplicated Firewall)或其他防火墙工具,请确保已打开SSH端口(默认为22)。

要打开SSH端口,请执行以下命令:

对于UFW:

sudo ufw allow 22/tcp

对于其他防火墙工具,请根据其文档打开相应的端口规则。

四、尝试使用公钥身份验证

如果上述步骤无法解决问题,您可以尝试使用公钥身份验证来登录SSH服务器。公钥身份验证是一种更安全的身份验证方法,它使用一对加密密钥(公钥和私钥)来验证身份。您可以在本地计算机上生成一对新的密钥对,并将公钥添加到SSH服务器的授权列表中。然后,您可以使用私钥进行身份验证。以下是生成密钥对的步骤:

  1. 在本地计算机上打开终端。

  2. 生成新的密钥对:

ssh-keygen -t rsa -b 4096

这将生成一对新的RSA密钥对,并保存在默认位置(通常是~/.ssh/id_rsa~/.ssh/id_rsa.pub)。  
3. 将公钥添加到SSH服务器的授权列表中。您可以将公钥复制并粘贴到SSH服务器的配置文件中(通常是/etc/ssh/authorized_keys),或者将其上传到服务器的指定目录中。确保将公钥添加到与目标用户匹配的文件的正确位置。

777-10.png

SSH使用密钥连接远程服务器背后的过程是什么

当使用SSH进行免密登录时,这一过程大致遵循以下步骤:

1. 生成公钥和私钥密钥对

首先,在客户端机器上,需要生成一个ssh密钥对,通常使用 ssh-keygen命令,会创建一对密钥:一个私钥(默认为:id_rsa ),存储在本地且必须保密;另一个公钥(默认为:id_rsa.pub ),可以公开。

2. 公钥复制到远程服务器

将生成的公钥 id_rsa.pub 添加到远程服务器上的用户的家目录下,如:~/.ssh/authorized_keys 文件中。可以通过手动复制粘贴公钥内容到远程服务器,需要注意此文件权限600,或者使用 ssh-copy-id命令复制到远程的服务器上。

3. 发起SSH请求

客户端机器使用   ssh 用户名@远程主机   命令发起连接,SSH客户端会查找默认的密钥文件(通常是`~/.ssh/id_rsa`等)以及其他密钥文件(需要ssh -i 指定,如:ssh -i ~/.ssh/my_special_key_rsa user@example.com   

4. 密钥验证过程

  • 密钥交换:连接建立初期,ssh客户端和服务器会协商加密算法并进行密钥交换,确保后续通信的加密性。

  • 身份验证请求:服务器会请求客户端证明其身份。SSH客户端此时会查找并尝试使用所有可用的私钥(默认位置或其他配置指定的位置)。

  • 公钥匹配:客户端向服务器发送一个签名,这个签名是用本地私钥对服务器提供的随机数据进行加密的结果。服务器使用之前存放在authorized_keys 文件中的对应公钥验证这个签名。如果找到匹配,服务器生成一个随机数并使用该公钥加密后发送给客户端。

  • 授权:客户端用对应的私钥解密这个随机数,并将其回传给服务器。如果解密成功,服务器验证通过,允许登录。

     

假如有很多公钥,那么如何知道用的是哪个公钥呢?在客户端的 ~/.ssh 目录下,可以查看存在的公钥文件(如 id_rsa.pub,id_ed25519.pub 等)来确定有哪些公钥可用。

如果想要确切知道某次ssh连接使用了哪个公钥,可以在发起ssh请求时加上`-v`或`-vv`(更高详细级别)的参数,这将使得ssh客户端输出详细的调试信息,其中包括使用的密钥文件路径。

例如,运行 ssh -v 用户名@远程主机,在输出的日志中,类似于以下的信息,指示了SSH尝试使用哪些密钥进行认证:  

5553-1.png

或者ssh配置文件指定密钥,可以在 ~/.ssh/config文件中为每个远程主机指定应使用的密钥对。这样可以精确控制连接特定主机时使用哪个密钥。配置示例如下:

  •  

  •  

  •  

  Host exampleHost
    HostName example.com
    User yourUsername
    IdentityFile ~/.ssh/special_key_rsa
 
图像通讯
图标主要
通讯

订阅我们的时事消息

单击按钮即表示您同意我们的条款和条件