如何在 Linux 上设置无密码 SSH 身份验证

随着不断发展的网络安全环境,密码变得容易受到攻击。 系统比以往任何时候都更容易受到暴力攻击。 用户还可以通过使用弱且经常被猜到的密码保护系统,从而使黑客更容易渗透到他们的系统中。 2 因素身份验证现在很普遍,它使用 OTP 代码提供了额外的保护层,以确保它实际上是用户登录系统。

保护服务器的另一种方法是在服务器上设置无密码 SSH 身份验证。 这使用公钥 SSH 身份验证,其中在本地系统上生成 SSH 密钥对。 密钥对由一个私有和一个公共 SSH 密钥组成。 私钥保留在本地系统上,而公钥上传到远程系统。 在身份验证期间,保存在远程系统上的公钥和本地系统上的私钥之间会发生密钥交换。 因此,后续连接是安全的,不需要密码。

在本指南中,我们将通过 3 个简单的步骤向您介绍如何配置密码 SSH 身份验证。

无密码 SSH 设置实验室

出于演示目的,我们将使用以下实验室设置:

Local Linux system - 192.168.2.104
Remote Linux system - 192.168.2.108

谨慎的做法是确保您可以使用 SSH 密码身份验证从本地系统访问远程系统。

让我们开始吧!

步骤 1. 生成 SSH 密钥对

马上,我们将生成一个 SSH 密钥对,它将存储在主目录中。 所以,调用 ssh-keygen 命令如图。 在这里,我们正在创建一个 4096 位的密钥对。

$ ssh-keygen -b 4096

只需按 ENTER 即可接受默认值。 您可以在 SSH 密钥对中找到 ~/.ssh 目录,它是您的主文件夹中的隐藏目录。

只是为了确定使用 ls 命令来检查 SSH 密钥的存在。

$ ls .ssh

私钥表示为 id_rsa 尽管 id_rsa.pub 是公钥。 这些是加密的加密密钥。 稍后,我们将把公钥复制到远程系统。

步骤 2. 将 SSH 密钥对复制到远程系统

接下来,您需要将公钥复制并保存到远程 Linux 系统。 我们为什么要这样做呢? 在公钥认证中,​​远程系统上的公钥和本地系统上的私钥之间发生认证握手。 这确保本地主机系统和远程系统之间的所有后续流量都被加密。

要复制 SSH 公钥,请运行 ssh-copy-id 命令如下。

$ ssh-copy-id [email protected]

在我们的例子中,这将是:

$ ssh-copy-id [email protected]

要继续连接,请键入“是”并按 ENTER。 此后,向远程系统提供密码以登录并复制 SSH 公钥。

公共 SSH 密钥被添加到一个名为 授权密钥 在您正在登录的用户帐户的主目录中。 该文件的完整路径是 ~/.ssh/authorized_keys

成功复制 SSH 密钥后,您现在可以使用公钥认证登录远程系统,如下所示。

$ ssh [email protected]

从下面的代码片段中,您可以看到我们已经登录到远程系统,甚至没有被提示输入密码。 惊人的!

如前所述,公钥保存在 ~/.ssh/authorized_keys 小路。

步骤 3. 禁用密码验证(可选)

如果您想提高远程系统的安全性,您可能需要考虑禁用密码验证。 这样做,您可以确保您是唯一可以使用本地系统上的私钥访问系统的人。 密钥应该始终是最高机密。 切勿与任何人共享它,以免您的系统受到威胁。

在远程主机上,打开访问 /etc/sshd_config 文件显示。

$ sudo vim /etc/sshd_config

找到 密码认证 参数并将其设置为 如图所示。

接下来,确保已启用公钥身份验证,如图所示。

要使更改保持不变,请按如下方式重新启动 SSH 服务。

$ sudo systemctl restart ssh

为了演示禁用密码验证,我们将尝试使用 Putty SSH 客户端访问服务器。 提供远程系统的地址并点击“打开”

提供远程用户名并按 ENTER。 这一次,您获得了身份验证,因为我们禁用了密码身份验证。

结论

公钥身份验证是一种连接和强化服务器的防篡改方式。 它消除了诸如暴力密码攻击之类的攻击媒介,当您的系统具有密码身份验证时,这些攻击是不祥的。