每天似乎都会有大量安全漏洞报告,导致我们的数据面临危险。尽管 SSH 是一种与 Linux 系统远程建立连接的安全方法,但是,未知用户如果窃取了您的 SSH 密钥,仍然可以访问您的 Linux 计算机,即使您禁用密码或只允许通过以下方式进行 SSH 连接:公钥和私钥。
在本文中,我们将解释如何使用Google Authenticator在Fedora Linux 发行版上为 SSH设置双因素身份验证 ( 2FA ) ,通过提供 TOTP (基于时间的一次性验证)以更安全的方式访问远程 Linux 系统密码)由移动设备上的身份验证器应用程序随机生成的数字。
另请阅读:如何在 CentOS 和 Debian 中设置 SSH 登录的双因素身份验证
请注意,您可以在移动设备上使用任何与TOTP算法兼容的双向身份验证应用程序。有许多适用于 Android 或 IOS 的免费应用程序支持TOTP和Google Authenticator,但本文使用Google Authenticator作为示例。
在 Fedora 上安装 Google 身份验证器
首先,使用以下dnf 命令在 Fedora 服务器上安装Google Authenticator应用程序。
$ sudo dnf install -y 谷歌身份验证器
![](https://www.alaica.com/wp-content/uploads/linux-505.png)
安装Google Authenticator后,您现在可以运行该应用程序。
$ 谷歌身份验证器
该应用程序会提示您一些问题。以下片段向您展示了如何回答相当安全的设置。
您是否希望身份验证令牌基于时间(是/否)y
您是否希望我更新您的“/home/user/.google_authenticator”文件(是/否)?y
![](https://www.alaica.com/wp-content/uploads/linux-506.png)
该应用程序为您提供密钥、验证码和恢复码。将这些密钥保存在安全的位置,因为如果您丢失移动设备,这些密钥是访问服务器的唯一方法。
设置手机验证
在您的手机上,前往Google Play或iTunes应用商店,搜索Google Authenticator并安装该应用程序。
现在在手机上打开Google Authenticator应用程序并扫描 Fedora 终端屏幕上显示的二维码。二维码扫描完成后,您将获得身份验证器应用程序随机生成的号码,并在每次远程连接到 Fedora 服务器时使用该号码。
![](https://www.alaica.com/wp-content/uploads/linux-52.jpg)
完成谷歌身份验证器配置
Google Authenticator应用程序会提示更多问题,以下示例显示如何回答这些问题以设置安全配置。
![](https://www.alaica.com/wp-content/uploads/linux-507.png)
现在您需要配置 SSH 以使用新的双向身份验证,如下所述。
配置 SSH 以使用 Google 身份验证器
要将 SSH 配置为使用身份验证器应用程序,首先您需要使用公共 SSH 密钥建立有效的 SSH 连接,因为我们将禁用密码连接。
打开服务器上的/etc/pam.d/sshd文件。
$ sudo vi /etc/pam.d/sshd
注释掉auth substack password-auth
文件中的行。
#auth 子堆栈密码-auth
接下来,将以下行放置到文件末尾。
验证足够 pam_google_authenticator.so
保存并关闭文件。
接下来,打开并编辑/etc/ssh/sshd_config文件。
$ sudo vi /etc/ssh/sshd_config
搜索该ChallengeResponseAuthentication
行并将其更改为yes
。
挑战响应身份验证 是
搜索该PasswordAuthentication
行并将其更改为no
。
密码验证 否
接下来,将以下行放置到文件末尾。
身份验证方法 公钥、密码公钥、键盘交互
保存并关闭文件,然后重新启动 SSH。
$ sudo systemctl 重新启动 sshd
在 Fedora 上测试双因素身份验证
现在尝试远程连接到您的服务器,它会要求您输入验证码。
$ ssh user@example.com 验证码:
验证码是由您的身份验证器应用程序在您的手机上随机生成的。由于生成的代码每隔几秒就会更改一次,因此您需要在创建新代码之前快速输入它。
![](https://www.alaica.com/wp-content/uploads/linux-53.jpg)
如果您输入错误的验证码,您将无法连接到系统,并且您将收到以下权限被拒绝的错误。
$ ssh user@example.com 验证码: 验证码: 验证码: 权限被拒绝(键盘交互)。
结论
通过实施这种简单的双向身份验证,您为系统添加了额外的安全层,并且这使得未知用户更难访问您的服务器。