服务器系统管理员的首要任务是确保已经实施了强大的安全协议,以保护网络中的服务器和桌面免受未经授权的访问。这也是为什么 SSH(安全外壳协议)的安全性至关重要,SSH 被广泛用于访问远程 Linux 服务器。尽管 SSH 是一个安全的通信媒介,可以在服务器和客户端系统之间建立联系,但它仍然需要一些安全配置。默认情况下,SSH 使用基于密码的认证方式,如果没有小心管理,可能会容易受到暴力破解攻击。因此,禁用 SSH 中的密码认证并改用基于密钥的认证是提升服务器安全性的关键一步。
在本教程中,我们将学习如何关闭 SSH 中的密码认证;我们不再使用简单的密码,而是确保只有具有正确 SSH 密钥的用户才能访问服务器。在继续之前,请确保您已经设置了 SSH 密钥认证,因为这种方法会完全阻止基于密码的登录。
关闭 SSH 密码认证的步骤
步骤 1:登录到您的服务器
如果您可以直接访问 Linux 服务器,则可以跳过此步骤;否则,远程服务器的用户需要首先登录。为此,他们可以使用 SSH 登录,并且至少需要具有 sudo 权限来编辑文件。下面是使用 SSH 的标准语法:
username@your_server_ip
步骤 2:备份 SSH 配置文件
登录到服务器后,务必备份 SSH 配置文件。这样,如果发生意外情况,我们可以恢复原始的配置文件和设置。
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
步骤 3:编辑 SSH 配置文件
接下来,使用任何文本编辑器编辑当前的 SSH 配置文件(路径:`/etc/ssh/sshd_config`)。这里我们使用 NANO 编辑器。没有安装 NANO 的用户可以使用以下命令进行安装:
sudo dnf install nano 或 sudo apt install nano
如果不想使用 NANO,也可以使用默认的 VIM 编辑器,选择权在您。
sudo nano /etc/ssh/sshd_config
步骤 4:找到密码认证设置
在 `ssh_config` 文件中,找到控制密码认证的那一行。或者,NANO 编辑器用户可以通过快捷键 Ctrl+W 来搜索这一行;键入要查找的行名称并按 Enter 键。
#PasswordAuthentication yes
如果这行被注释掉(有 `#` 符号),请去掉注释符号,并将 `yes` 修改为 `no`,这样就禁用了基于密码的登录,只允许基于密钥的认证。
PasswordAuthentication no

附加信息:如果禁用了 SSH 密码认证,您可能需要启用公钥认证;确保在 `sshd_config` 文件中取消注释以下两行并保持如下所示:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
`PubkeyAuthentication yes` 指令启用公钥认证,而 `AuthorizedKeysFile .ssh/authorized_keys` 指定存储公钥的文件。
步骤 5:保存并关闭配置文件
完成修改后,保存文件并退出文本编辑器。使用 NANO 的用户可以按 Ctrl+X,然后按 Y 确认修改,再按 Enter 键退出。使用 VIM 的用户需要按 Esc 键,然后键入 `:wq` 并按 Enter 键退出编辑器。
步骤 6:重启 SSH 服务
必须重启 SSH 服务器服务,以使我们对 SSH 配置文件所做的更改生效。使用以下命令来重启 SSH 服务:
sudo systemctl restart ssh
步骤 7:验证配置
确保成功禁用了 SSH 密码认证是至关重要的。为此,可以尝试从另一个系统的终端登录服务器,而不要关闭当前的 SSH 会话。如果 SSH 配置正确,服务器这时不会允许使用密码登录,而是要求提供 SSH 密钥或其他您已配置的认证方式。
ssh username@your_server_ip
如果没有正确设置基于密钥的认证,禁用了密码认证,又没有启用其他认证方式,您可能会被锁定在服务器外。请在关闭密码认证的 SSH 会话之前,仔细检查 SSH 密钥是否正常工作。

禁用 Linux 服务器上 SSH 的密码认证可以显著提升服务器的整体安全性。这就是为什么几乎所有云服务器服务提供商(例如 AWS)都只提供基于公钥的认证方式来登录 SSH 服务器。此外,无密码 SSH 认证可以大大降低通过暴力破解攻击进行未经授权访问的风险。按照本教程的步骤操作,将确保只有拥有正确 SSH 密钥的用户才能登录,从而加强服务器的整体安全性。











