前言
咱在亚马逊上搞到了个Yubikey 5NFC,这几天在挖掘他的用途;本来想着用yubikey给SSH提供private Key来着,但与咱的软件环境有冲突、未遂,于是就给SSH上了TOTP验证,连Password都省了
注意事项
添加TOTP验证不一定成功,请对设备进行备份处理,以防设置无效无法通过SSH登录设备
1. 准备工作
1.1 环境配置
TOTP功能实现依赖于 Google Authenticator PAM 模块,需手动安装
sudo apt update
sudo apt install libpam-google-authenticator
1.2 生成TOTP Secret Key
使用 google-authenticator
生成Secret Key
google-authenticator -t -f -d -w 3 -e 10 -r 3 -R 30
参数解释:
参数 | 说明 |
-t | 使用TOTP(基于时间的OTP) |
-c | 使用HOTP(基于计数器的OTP) |
-f | 强制将配置写入 ~/.google_authenticator |
-d | 不允许重复使用Token |
-w | Token窗口大小,即允许过早或过晚的Token数量总和 |
-e | 指定生成的紧急备用代码数量 |
-r | 限速,在单位时间内最大尝试次数 |
-R | 限速,指定单位时间,单位:s e.g: -r 3 -R 30 意为每30s最大允许3次登录 |
运行此命令后,你会得到一个QRCode(没看到?别慌,下面有Secret Key)
使用你的TOTP验证器扫描此QRCode或手动输入Secret Key,并提交得到的Token,模块的配置就完成了
2. SSH配置
2.1 修改SSH PAM 配置
打开 PAM 配置文件
sudo vim /etc/pam.d/sshd
在此文件尾部加上
# TOTP
auth required pam_google_authenticator.so nullok
# Tip:nullok意为告诉用户这个验证方法是可选的,可去掉
禁用Password验证(可选,加注释就好)
# @include common-auth
保存文件并关闭
2.2 修改SSH配置
打开 SSH 配置文件
sudo vim /etc/ssh/sshd_config
禁用公私钥验证(可选)
PubkeyAuthentication no
接下来,在 /etc/ssh/sshd_config.d/
新建一个 totp.conf
sudo vim /etc/ssh/sshd_config.d/totp.conf
并添加以下配置:
# 禁用密码验证(可选)
PasswordAuthentication no
# 启用质询-响应验证
ChallengeResponseAuthentication yes
AuthenticationMethods keyboard-interactive
# Tip:验证方法组根据自己的需求添加
# 仅TOTP登录: keyboard-interactive
# 公私钥验证 + TOTP : publickey,keyboard-interactive
# 密码 + TOTP:password,keyboard-interactive
# 公私钥 + 密码 + TOTP:publickey,password,keyboard-interactive
保存配置并退出,重启sshd服务
sudo systemctl restart sshd.service
警告:不要退出当前ssh session,以免配置错误导致无法登录!
不妨尝试开一个新的session,验证一下?;)
End. 迁移
如果想多个用户使用同一个TOTP Token,只需将当前用户根目录下的 .google_authenticator
文件复制到目标用户根目录即可~
考虑到安全性,请将 .google_authenticator
的权限修改为400,并确保owner与group是当前用户!
考虑到安全性,请将 .google_authenticator
的权限修改为400,并确保owner与group是当前用户!
考虑到安全性,请将 .google_authenticator
的权限修改为400,并确保owner与group是当前用户!
Comments | NOTHING