网站搜索

如何在 Fedora 上为 SSH 设置双因素身份验证


每天似乎都会有大量安全漏洞报告,导致我们的数据面临危险。尽管 SSH 是一种与 Linux 系统远程建立连接的安全方法,但是,未知用户如果窃取了您的 SSH 密钥,仍然可以访问您的 Linux 计算机,即使您禁用密码或只允许通过以下方式进行 SSH 连接:公钥和私钥。

在本文中,我们将介绍如何在 Fedora Linux 发行版上使用 Google Authenticator 为 SSH 设置双因素身份验证 (2FA) 来访问通过提供由移动设备上的身份验证器应用程序随机生成的TOTP基于时间的一次性密码)号码,以更安全的方式连接远程 Linux 系统。

另请阅读:如何在 CentOS 和 Debian 中为 SSH 登录设置双因素身份验证

请注意,您可以在移动设备上使用任何与TOTP算法兼容的双向身份验证应用程序。有许多适用于 Android 或 IOS 的免费应用程序支持 TOTPGoogle 身份验证器,但本文使用 Google 身份验证器 作为示例。

在 Fedora 上安装 Google 身份验证器

首先,使用以下 dnf 命令在 Fedora 服务器上安装 Google Authenticator 应用程序。

sudo dnf install -y google-authenticator

安装Google Authenticator后,您现在可以运行该应用程序。

google-authenticator

该应用程序会提示您一些问题。以下片段向您展示了如何回答相当安全的设置。

Do you want authentication tokens to be time-based (y/n) y Do you want me to update your "/home/user/.google_authenticator" file (y/n)? y

该应用程序为您提供密钥、验证码和恢复码。将这些密钥保存在安全的位置,因为如果您丢失移动设备,这些密钥是访问服务器的唯一方法。

设置手机验证

在您的手机上,前往应用商店 Google PlayiTunes 并搜索 Google Authenticator 并安装该应用程序。

现在在手机上打开 Google Authenticator 应用程序并扫描 Fedora 终端屏幕上显示的二维码。二维码扫描完成后,您将获得身份验证器应用程序随机生成的号码,并在每次远程连接到 Fedora 服务器时使用该号码。

完成谷歌身份验证器配置

Google 身份验证器应用程序会提示更多问题,以下示例展示了如何回答这些问题以设置安全配置。

现在您需要配置 SSH 以使用新的双向身份验证,如下所述。

配置 SSH 以使用 Google 身份验证器

要将 SSH 配置为使用身份验证器应用程序,首先您需要使用公共 SSH 密钥建立有效的 SSH 连接,因为我们将禁用密码连接。

打开服务器上的 /etc/pam.d/sshd 文件。

sudo vi /etc/pam.d/sshd

注释掉文件中的 auth substack password-auth 行。

#auth       substack     password-auth

接下来,将以下行放置到文件末尾。

auth sufficient pam_google_authenticator.so

保存并关闭文件。

接下来,打开并编辑 /etc/ssh/sshd_config 文件。

sudo vi /etc/ssh/sshd_config

搜索 ChallengeResponseAuthentication 行并将其更改为 yes

ChallengeResponseAuthentication yes

搜索 PasswordAuthentication 行并将其更改为 no

PasswordAuthentication no

接下来,将以下行放置到文件末尾。

AuthenticationMethods publickey,password publickey,keyboard-interactive

保存并关闭文件,然后重新启动 SSH。

sudo systemctl restart sshd

在 Fedora 上测试双因素身份验证

现在尝试远程连接到您的服务器,它会要求您输入验证码。

ssh [email 

Verification code:

验证码是由您的身份验证器应用程序在您的手机上随机生成的。由于生成的代码每隔几秒就会更改一次,因此您需要在创建新代码之前快速输入它。

如果您输入错误的验证码,您将无法连接到系统,并且您将收到以下权限被拒绝的错误。

ssh [email 

Verification code:
Verification code:
Verification code:
Permission denied (keyboard-interactive).
结论

通过实施这种简单的双向身份验证,您为系统添加了额外的安全层,并且这使得未知用户更难访问您的服务器。