谷歌身份验证器 (Google Authenticator) 是 Google 推出的基于时间的一次性密码 (Time-based One-time Password, TOTP) 算法,其与 SSH Password 或 Public Key 配合,在普通 SSH 密码或密钥验证前进行基于 TOTP 的二阶段验证,以提升 SSH 登录安全性。

安装PAM模块

通过 SSH 登陆 Ubuntu 20.04 系统的 VPS,使用下面命令安装 Google Authenticator PAM 模块:

sudo apt install libpam-google-authenticator

生成二次验证代码

使用下面命令运行 Google Authenticator 设置程序:

google-authenticator -t -f -d -w 3 -e 5 -r 3 -R 15

选项说明:

  • -t : 使用 TOTP 验证
  • -f : 将配置保存到 ~/.google_authenticator
  • -d : 不允许重复使用以前使用的令牌
  • -w 3 : 允许的令牌的窗口大小。 默认情况下,令牌每 30 秒过期一次。 窗口大小 3 允许在当前令牌之前和之后使用令牌进行身份验证以进行时钟偏移。
  • -e 5 : 生成 5 个紧急备用代码
  • -r 3 -R 15 : 限速,每 15 秒允许 3 次登录

更多帮助信息可以使用 --help 选项查看。

程序运行后,将会更新配置文件,并且显示下面信息:

  • 二维码,您可以使用大多数身份验证器应用程序扫描此代码。
  • 一个秘密的钥匙,如果您无法扫描二维码,请在您的应用中输入此密钥。
  • 初始验证码,该验证码将在30秒后失效。
  • 5 个一次性使用紧急代码的列表。

配置SSH

编辑sshd文件

nano /etc/pam.d/sshd

在文件底部添加下方内容

# Google TOTP
Auth required pam_google_authenticator.so nullok
nullok 最后一行末尾的单词告诉 PAM 这种身份验证方法是可选的。这允许没有 OATH-TOTP 令牌的用户仍然使用他们的 SSH 密钥登录。一旦所有用户都拥有 OATH-TOTP 令牌,您就可以 nullok 从此行中删除以强制使用MFA。

保存并关闭文件。

配置sshd_config支持MFA认证:

nano /etc/ssh/sshd_config

在文件中查找 ChallengeResponseAuthentication 并将其设置为 yes

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication yes

保存并关闭文件。

重新启动sshd服务来重新加载配置。

注意:请勿关闭当前ssh连接,否则可能会因为配置错误无法通过ssh连接服务器
systemctl restart sshd.service

相关文章

参考

文章目录