如何在 Fedora 上为 SSH 设置双因素身份验证
每天都有很多安全漏洞被报道,我们的数据处于危险之中。尽管 SSH 是一种与 Linux 系统建立远程连接的安全方式,但即使您禁用密码或仅允许通过公钥和私钥进行 SSH 连接,未知用户如果窃取了您的 SSH 密钥,仍然可以访问您的 Linux 计算机。
在本文中,我们将解释如何使用Google Authenticator为Fedora Linux 发行版上的 SSH 设置双因素身份验证 ( 2FA ),通过提供由移动设备上的身份验证器应用程序随机生成的TOTP(基于时间的一次性密码)号码以更安全的方式访问远程 Linux 系统。
另请阅读:如何在 CentOS 和 Debian 中为 SSH 登录设置双因素身份验证
请注意,您可以使用任何与TOTP算法兼容的双向身份验证应用程序来为您的移动设备服务。有许多适用于 Android 或 IOS 的免费应用程序支持TOTP和Google Authenticator,但本文以Google Authenticator为例。
在 Fedora 上安装 Google Authenticator
首先,使用以下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 身份验证器配置
Google Authenticator应用程序会提示进一步的问题,以下示例显示如何回答这些问题以设置安全配置。
现在您需要配置 SSH 以使用新的双向身份验证,如下所述。
配置 SSH 以使用 Google Authenticator
要配置 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 user@example.com Verification code:
验证码是由您的身份验证应用程序在您的手机上随机生成的。由于生成的代码每隔几秒就会发生变化,因此您需要在创建新代码之前快速输入。
如果您输入错误的验证码,您将无法连接到系统,并且会收到以下权限被拒绝错误。
$ ssh user@example.com Verification code: Verification code: Verification code: Permission denied (keyboard-interactive).
结论
通过实现这种简单的双向身份验证,您为系统添加了额外的安全层,同时也使未知用户更难访问您的服务器。