Debian 服务器启用 OTP 二步验证方式登陆

OATH-TOTP(Open Authentication Time-Based One-Time Password)是一种开放式协议,使用共享密钥和当前时间生成一次性密码。此时不仅需要提供正确的用户名和密码或者秘钥,还必须输入由支持OATH-TOTP的验证器生成的一次性密码才能登录SSH服务器。

TOTP验证码生成依赖于当前时间,在开始操作前,请确保服务器时间与本地时间一致。

安装软件包

1
sudo apt-get install libpam-google-authenticator

初始化配置

执行以下命令进行初始化,该操作只对当前的用户生效,请切换到需要动态验证码的账户进行操作

1
google-authenticator -t -f -d -w 3 -e 10 -r 3 -R

参数含义:

  • -t: 使用 TOTP 验证
  • -f: 将配置保存到 ~/.google_authenticator 文件里面
  • -d: 不允许重复使用以前使用的令牌
  • -w 3: 使用令牌进行身份验证以进行时钟偏移
  • -e 10: 生成 10 个紧急备用代码
  • -r 3 -R 30: 限速 - 每 30 秒允许 3 次登录

执行后注意将生成的备用码保存到安全的位置,当用于认证的设备丢失时可用备用码验证登陆。

启用二步认证

编辑/etc/pam.d/sshd文件,在其末尾添加如下内容。

1
auth required pam_google_authenticator.so nullok

TODO:末尾 nullok 表示允许没有启用 OATH-TOTP 的用户继续使用之前的方式登录服务器,如果去掉将导致未配置二步验证的用户无法登陆。

编辑/etc/ssh/sshd_config文件,将其中的ChallengeResponseAuthentication配置项值改为yes。至此 SSH 登陆的二步验证已配置完成,执行sudo systemctl restart ssh.service重启SSH服务进行测试。

TODO:在确定配置成功之前(即重启 SSH 服务后能够新建 SSH 会话),请勿断开当前 SSH 会话

番外

上文讲述的方法用于开启登陆时的二步验证,sudo 同样可以开启二步验证,只是作者并没有成功,有兴趣的朋友可自行尝试,本文就这样了!😆

参考资料