Ubuntu 16.04下仅为root用户配置SSH双因素认证的可行性咨询
仅为Root用户配置SSH双因素认证(Ubuntu 16.04)
当然可以只给root用户启用双因素认证,不用强制所有用户都用!下面是亲测有效的具体配置步骤:
1. 安装Google Authenticator依赖包
首先更新系统包列表并安装对应的PAM模块:
apt-get update && apt-get install libpam-google-authenticator
2. 为Root用户初始化双因素配置
切换到root用户(或者用sudo -i获取root权限),运行初始化命令:
su - root google-authenticator
按照提示一步步操作:
- 输入
y生成新的密钥对,此时会显示二维码和一串密钥,用Google Authenticator app扫码添加账户,同时务必保存好下方的应急验证码(万一手机丢失可以用这些码登录) - 输入
y确认更新~/.google_authenticator配置文件 - 输入
y禁止重放攻击(防止验证码被重复使用) - 输入
y允许验证码有30秒的有效窗口(避免时间同步问题导致验证失败) - 输入
n拒绝降低验证码有效期(默认30秒已经足够安全)
3. 配置PAM模块仅对Root生效
编辑SSH的PAM配置文件:
nano /etc/pam.d/sshd
在@include common-auth这一行之前添加以下内容:
# 仅对root用户触发双因素认证 auth [success=1 default=ignore] pam_succeed_if.so user = root auth required pam_google_authenticator.so
解释:第一行判断当前用户是否为root,如果是,就执行下一行的双因素验证;如果不是,直接跳过这两行,走常规的密码/密钥认证流程。
4. 修改SSH服务配置
编辑SSH配置文件:
nano /etc/ssh/sshd_config
确保以下配置项正确设置:
ChallengeResponseAuthentication yes UsePAM yes # 如果你想保留密码登录(配合双因素),保持下面这行yes;如果只用密钥+双因素,可以设为no PasswordAuthentication yes
然后在文件末尾添加一个Match块,专门针对root用户定义认证方式:
Match User root # 可根据需求调整: # 密码+双因素:password,keyboard-interactive # 密钥+双因素:publickey,keyboard-interactive AuthenticationMethods password,keyboard-interactive
5. 重启SSH服务使配置生效
service ssh restart
验证配置
- 用普通用户SSH登录服务器:应该和之前一样,不需要输入验证码
- 用root用户SSH登录:会先提示输入密码,然后要求输入
Verification Code(从Google Authenticator app获取),输入正确后即可登录
注意事项
- 一定要先测试普通用户登录正常,再测试root的双因素认证,避免误操作导致无法登录
- 妥善保存应急验证码,存到安全的离线位置(比如加密笔记)
- 如果你的服务器已经配置了SSH密钥登录,建议把
AuthenticationMethods设为publickey,keyboard-interactive,这样root登录需要密钥+双因素,安全性更高
内容的提问来源于stack exchange,提问作者user603749
相关产品推荐
相关产品推荐

