OATH-TOTP(Open Authentication Time-Based One-Time Password)是一种开放式协议,使用共享密钥和当前时间生成一次性密码。此时不仅需要提供正确的用户名和密码或者秘钥,还必须输入由支持OATH-TOTP的验证器生成的一次性密码才能登录SSH服务器。
TOTP验证码生成依赖于当前时间,在开始操作前,请确保服务器时间与本地时间一致。
安装软件包
|
|
初始化配置
执行以下命令进行初始化,该操作只对当前的用户生效,请切换到需要动态验证码的账户进行操作。
|
|
参数含义:
- -t: 使用 TOTP 验证
- -f: 将配置保存到 ~/.google_authenticator 文件里面
- -d: 不允许重复使用以前使用的令牌
- -w 3: 使用令牌进行身份验证以进行时钟偏移
- -e 10: 生成 10 个紧急备用代码
- -r 3 -R 30: 限速 - 每 30 秒允许 3 次登录
执行后注意将生成的备用码保存到安全的位置,当用于认证的设备丢失时可用备用码验证登陆。
启用二步认证
编辑/etc/pam.d/sshd
文件,在其末尾添加如下内容。
|
|
TODO:末尾 nullok 表示允许没有启用 OATH-TOTP 的用户继续使用之前的方式登录服务器,如果去掉将导致未配置二步验证的用户无法登陆。
编辑/etc/ssh/sshd_config
文件,将其中的ChallengeResponseAuthentication
配置项值改为yes
。至此 SSH 登陆的二步验证已配置完成,执行sudo systemctl restart ssh.service
重启SSH服务进行测试。
TODO:在确定配置成功之前(即重启 SSH 服务后能够新建 SSH 会话),请勿断开当前 SSH 会话
番外
上文讲述的方法用于开启登陆时的二步验证,sudo 同样可以开启二步验证,只是作者并没有成功,有兴趣的朋友可自行尝试,本文就这样了!😆