如何在 Fedora 上为 SSH 设置双因素身份验证
每天似乎都会有大量安全漏洞报告,导致我们的数据面临危险。尽管 SSH 是一种与 Linux 系统远程建立连接的安全方法,但是,未知用户如果窃取了您的 SSH 密钥,仍然可以访问您的 Linux 计算机,即使您禁用密码或只允许通过以下方式进行 SSH 连接:公钥和私钥。
在本文中,我们将介绍如何在 Fedora Linux 发行版上使用 Google Authenticator 为 SSH 设置双因素身份验证 (2FA) 来访问通过提供由移动设备上的身份验证器应用程序随机生成的TOTP(基于时间的一次性密码)号码,以更安全的方式连接远程 Linux 系统。
另请阅读:如何在 CentOS 和 Debian 中为 SSH 登录设置双因素身份验证
请注意,您可以在移动设备上使用任何与TOTP算法兼容的双向身份验证应用程序。有许多适用于 Android 或 IOS 的免费应用程序支持 TOTP 和 Google 身份验证器,但本文使用 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 Play 或 iTunes 并搜索 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).
结论
通过实施这种简单的双向身份验证,您为系统添加了额外的安全层,并且这使得未知用户更难访问您的服务器。