在CentOS / RHEL服务器上设置SSH两因素身份验证(2FA)
本教程将向您展示如何使用著名的Google Authenticator在CentOS / RHEL服务器上设置SSH两因素验证。 它将大大提高CentOS / RHEL服务器上SSH服务的安全性。
两因素身份验证如何工作
通常,您只需要输入密码或使用SSH密钥即可登录到远程CentOS / RHEL服务器。 两因素身份验证(2FA)要求您输入两条信息才能登录,因此,您还需要输入基于时间的一次性密码才能登录SSH服务器。 使用IETF标准的TOTP算法计算一次密码。 如今,许多网站和服务(Facebook,Google,Twitter等)为用户提供2FA保护其帐户安全,同时也为您的SSH服务器启用2FA是个好主意。
本教程将向您展示如何设置
- 使用2FA进行密码验证
- 2FA的公钥认证
注意:本文中将使用的开源服务器软件称为 google-authenticator
,它是从EPEL存储库安装的。 Google公司不以任何形式参与任何身份验证过程。 服务器软件和移动应用程序不需要网络访问。
步骤1:在CentOS / RHEL服务器上安装和配置Google Authenticator
登录到CentOS / RHEL服务器并运行以下命令,以从EPEL(企业Linux的额外软件包)存储库安装Google Authenticator。 qrencode
用于在命令行上生成QR码。
sudo dnf install -y epel-release sudo dnf install -y google-authenticator qrencode qrencode-libs
然后运行 google-authenticator
命令以在 ~/.ssh/
目录。
google-authenticator -s ~/.ssh/google_authenticator
当被问到“您是否希望身份验证令牌基于时间?” 回答 ÿ。
然后,您将在手机上看到需要使用TOTP应用程序扫描的QR码。
我推荐两个应用程序:
- Google身份验证器 是最著名的TOTP移动应用。 您可以通过手机上的Google Play或Apple应用商店进行安装。
- 的 Google身份验证器 移动应用不是开源的。 如果您不信任Google,则可以使用FreeOTP,这是由Red Hat开发的开源TOTP移动应用程序。
使用手机上的Google Authenticator或FreeOTP扫描QR码。 请注意,您需要放大终端窗口以扫描完整的QR码。
QR码代表密钥,只有您的SSH服务器和TOTP移动应用知道该密钥。 扫描QR码后,您将在手机上看到一个六位数的一次性密码。 默认情况下,它每30秒更改一次。 您需要将此一次性密码输入终端。
现在,在终端窗口中,您应该看到 紧急临时代码。 将信息保存到安全的地方非常重要,以防手机丢失。
然后您可以输入 ÿ 回答所有剩余的问题。 这将更新您的Google Authenticator配置文件,禁用同一身份验证令牌的多次使用,增加时间范围并启用速率限制以防止强行登录尝试。
步骤2:将SSH守护程序配置为使用Google Authenticator
- 使用2FA进行密码验证
- 2FA的公钥认证
使用2FA进行密码验证
如果您不使用SSH密钥,请按照以下说明进行操作。
打开SSH服务器配置文件。
sudo nano /etc/ssh/sshd_config
在文件中找到以下两个参数,并确保将它们都设置为 是。
UsePAM yes ChallengeResponseAuthentication yes
PAM 代表可插入身份验证模块。 它提供了一种简便的方法,可以将不同的身份验证方法插入Linux系统。 要使用SSH启用Google Authenticator,必须启用PAM和质询响应身份验证。
如果要允许root用户使用2FA,请找到 PermitRootLogin
参数并将其值设置为 yes
。 它不可能是 PermitRootLogin no
要么 PermitRootLogin prohibit-password
。
PermitRootLogin yes
保存并关闭文件。 然后重新启动SSH守护程序,以使更改生效。
sudo systemctl restart sshd
现在,为SSH守护程序编辑PAM规则文件。
sudo nano /etc/pam.d/sshd
要在SSH中启用2FA,请添加以下两行。
#two-factor authentication via Google Authenticator auth required pam_google_authenticator.so secret=${HOME}/.ssh/google_authenticator
保存并关闭文件。 从现在开始,SSH守护程序将要求您输入用户密码和验证码(由Google Authenticator生成的一次性密码)。 以下屏幕快照显示了从Ubuntu桌面到CentOS Linux服务器的SSH登录会话。
2FA的公钥认证
如果您使用SSH密钥登录SSH服务器,请按照以下说明进行操作。
打开SSH服务器配置文件。
sudo nano /etc/ssh/sshd_config
在文件中找到以下两个参数,并确保将它们都设置为 是。
UsePAM yes ChallengeResponseAuthentication yes
PAM 代表可插入身份验证模块。 它提供了一种简便的方法,可以将不同的身份验证方法插入Linux系统。 要使用SSH启用Google Authenticator,必须启用PAM和质询响应身份验证。
如果要允许root用户使用2FA,请找到 PermitRootLogin
参数并将其值设置为 yes
。 它不可能是 PermitRootLogin no
要么 PermitRootLogin prohibit-password
。
PermitRootLogin yes
接下来,在此文件的末尾添加以下行。 这告诉SSH守护程序用户必须同时通过公共密钥身份验证和质询-响应身份验证。
AuthenticationMethods publickey,keyboard-interactive
保存并关闭文件。 然后重新启动SSH守护程序,以使更改生效。
sudo systemctl restart sshd
现在,为SSH守护程序编辑PAM规则文件。
sudo nano /etc/pam.d/sshd
要在SSH中启用2FA,请添加以下两行。
#two-factor authentication via Google Authenticator auth required pam_google_authenticator.so secret=${HOME}/.ssh/google_authenticator
同时注释掉以下行(在开头添加#)以禁用密码身份验证。
auth substack password-auth
保存并关闭文件。 从现在开始,您需要使用SSH密钥和Google Authenticator验证码登录。
笔记
- CentOS / RHEL服务器上的每个用户都需要运行
google-authenticator -s ~/.ssh/google_authenticator
命令并扫描QR码以使用两因素身份验证。 如果用户未设置并尝试登录,则错误消息“权限被拒绝(键盘交互)将会显示。 - 紧急暂存代码是您的备用代码。 如果您丢失了手机,则可以输入五个紧急暂存代码之一而不是一次性密码来完成两步验证。 这些代码仅供一次性使用。
- 如果要更改密钥,只需登录服务器并运行
google-authenticator -s ~/.ssh/google_authenticator
再次命令以更新~/.ssh/google_authenticator
文件。
如何在CentOS / RHEL服务器上禁用SSH两因素身份验证
编辑SSH守护程序的PAM规则文件。
sudo nano /etc/pam.d/sshd
注释掉以下行。
auth required pam_google_authenticator.so secret=${HOME}/.ssh/google_authenticator
保存并关闭文件。
包起来
我希望本教程可以帮助您在CentOS / RHEL服务器上设置SSH两因素身份验证。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多有用的教程。 保重🙂