在当今网络安全威胁日益严峻的环境下,保护您的服务器免受未经授权的访问变得前所未有的重要。作为 Linux 运维人员或服务器管理者,我们深知一个安全、可靠的远程连接工具是多么关键。FinalShell 作为一款广受欢迎的 SSH 终端与文件管理工具,其强大的功能深受用户喜爱。但仅仅依靠传统的密码登录,已经不足以应对日渐复杂的攻击手段。
这时,双因子认证(2FA),尤其是基于时间的一次性密码(TOTP),例如 Google Authenticator 提供的验证码,就成为了提升服务器安全性的最佳实践之一。本文将为您详细介绍如何在您的 Linux 服务器上配置 Google Authenticator,并通过 FinalShell 实现双因子认证登录,为您的服务器再添一道坚固的防线。
为什么您的 FinalShell 连接需要双因子认证?
想象一下,您的服务器就像您的家,密码就是您的家门钥匙。如果这把钥匙不慎泄露,或是被“暴力破解”——通过反复尝试各种组合来猜测——您的家就会面临被入侵的风险。传统的密码登录方式,即使密码强度很高,也并非万无一失。字典攻击、撞库攻击、暴力破解等手段依然可能威胁到您的账户安全。
双因子认证(Two-Factor Authentication, 2FA)引入了“第二个因子”,要求用户在输入密码(您知道的东西)之后,还需要提供一个额外的验证码(您拥有的东西,如手机上生成的代码)。这意味着即使攻击者获取了您的密码,他们也无法在没有您的手机或验证码设备的情况下登录您的服务器。这就像给您的家门加了一把指纹锁,即使小偷拿到了钥匙,没有您的指纹也无法进入。
对于通过 FinalShell 管理的服务器,其安全性直接关系到您数据的隐私和系统的稳定。启用 2FA 能够显著降低因密码泄露而导致的安全风险,为您的运维工作提供更安心的环境。
开始前的准备工作
在配置双因子认证之前,请确保您已经做好以下准备:
- 一台运行 Linux 系统的服务器:本教程适用于 CentOS/RHEL 和 Debian/Ubuntu 系列的 Linux 发行版。
- Root 权限或具有
sudo权限的用户:安装和配置过程需要修改系统文件。 - FinalShell 客户端:确保您已经安装并能正常连接到您的服务器。如果您还没有 FinalShell,可以访问 FinalShell 官方下载渠道 获取最新版本。
- 智能手机:并在手机上安装 Google Authenticator 应用(或其他兼容 TOTP 的应用,如 Authy)。
在进行任何关键系统配置前,强烈建议您备份重要的配置文件。
第一步:在 Linux 服务器上安装 Google Authenticator PAM 模块
我们需要在 Linux 服务器上安装一个 PAM(Pluggable Authentication Modules,可插拔认证模块)模块,它允许系统将 Google Authenticator 集成到认证流程中。
对于 CentOS / RHEL 系列系统(如 CentOS 7/8, Rocky Linux, AlmaLinux):
sudo yum install epel-release -y
sudo yum install google-authenticator -y
epel-release 包提供了 google-authenticator 所在的额外仓库。
对于 Debian / Ubuntu 系列系统:
sudo apt update
sudo apt install libpam-google-authenticator -y
安装完成后,模块就已经准备就绪了。
图:FinalShell 强大的终端管理界面,让您的服务器运维得心应手。
第二步:配置 Google Authenticator
安装完模块后,我们需要为您的 Linux 用户账户运行 google-authenticator 命令来生成验证器密钥。请使用您平时用于 FinalShell 登录的非 root 用户执行此命令,而不是 root 用户。如果您想为 root 用户启用 2FA,则需要切换到 root 用户来运行。但为了安全,我们通常建议禁用 root 远程登录,并使用普通用户登录后再切换到 root。
google-authenticator
运行命令后,您会看到一系列问题,请根据提示进行选择:
-
Do you want authentication tokens to be time-based (y/n)
- 输入
y。这是启用 TOTP(基于时间的一次性密码)的关键。
- 输入
-
接下来会显示一个巨大的 QR 码,一个密钥 (Secret Key),以及五个紧急备用码 (Emergency Scratch Codes)。
- 非常重要! 请立即用您的手机上的 Google Authenticator 应用扫描这个 QR 码,或者手动输入 Secret Key。这将把服务器与您的手机应用绑定。
- 再次强调! 务必将这五个紧急备用码妥善保存,最好是打印出来并存放在安全的地方。这些备用码在您手机丢失、损坏或无法生成验证码时,是您登录服务器的唯一途径。每个备用码只能使用一次。
-
Do you want to update the "~/.google_authenticator" file? (y/n)
- 输入
y。这将保存您的配置。
- 输入
-
Do you want to disallow multiple uses of the same authentication token? (y/n)
- 输入
y。这可以防止同一个验证码被多次使用,增加安全性。
- 输入
-
By default, tokens are good for 30 seconds. In order to compensate for possible time-sync problems between and your authentication device, a three-code window is enforced. This means that if you enter the code too late, or too early, it might still work. For high security environments, this should be disabled. Do you want to do so? (y/n)
- 输入
n。保持默认的三码窗口,可以减少因时间不同步导致登录失败的概率。如果您的服务器时间同步非常精准,并且追求极致安全,也可以选择y禁用。
- 输入
-
If the host can be attacked by brute force, it is possible to slowly topmost an authentication code. Extending the window for the same authentication code to larger than 30s would make this slightly more probable. Do you want to limit the number of login attempts with the same token to 3 per 30s? (y/n)
- 输入
y。限制登录尝试次数可以有效防止暴力破解。
- 输入
配置完成后,您的用户主目录下会生成一个 .google_authenticator 文件,包含了密钥信息。
第三步:修改 SSHD 配置以启用 PAM 认证
接下来,我们需要告诉 SSH 服务,在认证时要使用 PAM 模块。
编辑 SSH 服务的配置文件 /etc/ssh/sshd_config:
sudo vim /etc/ssh/sshd_config
找到以下两行(如果被注释,请取消注释,如果没有则添加):
ChallengeResponseAuthentication yes
UsePAM yes
为了进一步增强安全性,您可以选择性地禁用传统的密码登录,只允许 2FA 认证:
# PasswordAuthentication yes <-- 建议注释或改为 no
注意: 在您确保 2FA 配置成功之前,请不要禁用 PasswordAuthentication。否则,如果 2FA 配置失败,您将无法通过密码登录服务器。您可以先保持 PasswordAuthentication yes,待 2FA 测试成功后再回来禁用。
保存并关闭文件。然后,重启 SSH 服务以使配置生效:
对于 CentOS / RHEL 系列系统:
sudo systemctl restart sshd
对于 Debian / Ubuntu 系列系统:
sudo systemctl restart ssh
第四步:修改 PAM 配置以启用 Google Authenticator
这是最后一步关键配置,我们需要修改 PAM 针对 SSH 服务的配置文件,让它加载 pam_google_authenticator.so 模块。
编辑 /etc/pam.d/sshd 文件:
sudo vim /etc/pam.d/sshd
在文件的顶部添加以下一行:
auth required pam_google_authenticator.so
将其添加到文件的最前面,确保它在其他认证模块之前被加载。例如:
#%PAM-1.0
auth required pam_google_authenticator.so # 添加这一行
auth required pam_sepermit.so
auth include password-auth
account required pam_nologin.so
account include password-auth
password include password-auth
session optional pam_keyinit.so force revoke
session include password-auth
session required pam_loginuid.so
保存并关闭文件。无需重启 SSH 服务,PAM 配置会立即生效。
第五步:在 FinalShell 中连接并测试
现在,所有配置都已完成。打开您的 FinalShell 客户端,尝试连接到您的服务器。
- 输入您的用户名和密码。
- FinalShell 会提示您输入 "Verification code" 或 "Google Authenticator code"。
- 打开您手机上的 Google Authenticator 应用,输入当前显示的 6 位验证码。
如果一切顺利,您将成功登录服务器。恭喜您!您的 FinalShell 连接现在已经受到了双因子认证的保护。
如果您在连接过程中遇到任何问题,例如 FinalShell 连接超时,请先确保网络连接正常,并参考本教程的“常见问题”部分进行排查。
图:手机上的 Google Authenticator 应用,生成用于双因子认证的一次性密码。
如果您是第一次使用 FinalShell 连接服务器,可以参考我们的 FinalShell 首次连接服务器教程 获取更多帮助。
提升安全性:SSH 密钥登录与 2FA 的结合
除了双因子认证,SSH 密钥登录是另一种非常推荐的无密码认证方式。它通过公钥/私钥对来实现,私钥保存在本地,公钥上传到服务器。结合使用 SSH 密钥登录和 2FA,可以为您的服务器提供“三因子认证”般的强大保护:您拥有的私钥、您知道的密码(私钥的密码),以及您拥有的验证码(手机上的 2FA)。
当您同时启用 SSH 密钥登录和 2FA 时,您的 FinalShell 客户端会首先使用私钥尝试认证。如果私钥受到密码保护,您需要输入私钥密码。成功通过密钥认证后,系统还会要求您输入 Google Authenticator 验证码。
这种组合极大地增强了安全性,即使您的私钥被盗,攻击者也需要知道私钥密码和 2FA 验证码才能登录。我们强烈建议您采用这种高级别的安全策略。有关如何在 FinalShell 中配置 SSH 密钥登录,您可以参考这篇详细教程:FinalShell SSH 密钥对登录教程。
常见问题与故障排除
1. 忘记或丢失手机/验证码怎么办?
这是为什么要在第二步中妥善保存应急备用码的原因。如果您无法通过手机生成验证码,可以使用之前生成的五个应急备用码中的一个进行登录。请注意,每个备用码只能使用一次。
如果应急备用码也全部用完了,并且您无法登录:
- 如果您拥有服务器的物理访问权限,可以通过服务器控制台登录。
- 如果您有其他不受 2FA 限制的账户(例如,为 root 用户启用了密码登录但未启用 2FA),可以尝试用该账户登录。
- 在极端情况下,您可能需要进入服务器的救援模式或通过云服务商提供的 VNC/控制台访问,然后修改
/etc/pam.d/sshd文件,暂时注释掉auth required pam_google_authenticator.so这一行,重启 SSH 服务,登录后再重新配置。
2. 时间不同步导致验证失败
Google Authenticator 的验证码是基于时间的。如果您的服务器时间与手机时间不同步,可能会导致验证码验证失败。
- 检查服务器时间:
date - 同步服务器时间(推荐):
安装并配置 NTP 服务可以确保服务器时间始终与标准时间同步。
- CentOS/RHEL:
sudo yum install ntp -y sudo systemctl start ntpd sudo systemctl enable ntpd sudo ntpdate -u pool.ntp.org - Debian/Ubuntu:
sudo apt install ntp -y sudo systemctl restart ntp sudo ntpdate pool.ntp.org
- CentOS/RHEL:
- 调整手机时间: 在 Google Authenticator 应用中,进入设置 -> 时间校正,点击“立即同步”。
3. 配置错误导致无法登录
如果在配置过程中出现错误,可能导致您无法通过 SSH 登录。
- 不要关闭当前 FinalShell 连接: 在配置过程中,请务必保持一个已登录的 FinalShell 会话处于打开状态。这样,即使您配置错误导致新连接无法建立,您仍然可以通过这个旧会话回滚修改。
- 检查配置文件: 仔细检查
/etc/ssh/sshd_config和/etc/pam.d/sshd文件,确保没有语法错误或遗漏的配置。 - 查看 SSHD 日志: 登录失败时,可以查看 SSHD 的日志文件来获取错误信息。
- CentOS/RHEL:
/var/log/secure - Debian/Ubuntu:
/var/log/auth.log使用tail -f /var/log/secure或tail -f /var/log/auth.log可以实时查看日志。
- CentOS/RHEL:
4. 为什么我启用了 2FA,但 FinalShell 还是只让我输入密码?
请确保您是使用启用了 2FA 的用户登录。每个用户都需要单独运行 google-authenticator 命令。
另外,请检查 /etc/ssh/sshd_config 中的 ChallengeResponseAuthentication yes 和 UsePAM yes 是否已正确设置,以及 SSHD 服务是否已重启。同时,/etc/pam.d/sshd 中是否已添加 auth required pam_google_authenticator.so 并且在文件顶部。
总结
通过本文的详细教程,您应该已经成功为您的 FinalShell 连接配置了双因子认证。虽然这增加了登录时的额外一步,但它为您的 Linux 服务器提供了至关重要的安全防护,极大地降低了未经授权访问的风险。在网络安全日益重要的今天,采取一切可行的措施来保护您的数字资产是每位运维人员的责任。从现在开始,让双因子认证成为您运维工作的标准配置吧!
延伸阅读
若需进一步查阅,可先看本站以下教程: