Linux如何配置系统双因子登录_LinuxSSH2FA安全方案
发布时间 - 2025-11-28 00:00:00 点击率:次配置基于Google Authenticator的SSH双因子认证需安装libpam-google-authenticator,生成用户密钥并绑定至验证APP,随后在/etc/pam.d/sshd中添加auth required pam_google_authenticator.so,确保sshd_config中启用ChallengeResponseAuthentication yes、UsePAM yes,并设置AuthenticationMethods publickey,keyboard-interactive以实现密钥+动态验证码双重验证,最后重启sshd服务生效。
在Linux系统中配置双因子认证(2FA)可以显著提升SSH远程登录的安全性,尤其适用于暴露在公网的服务器。通过结合密码/密钥 + 动态验证码的方式,即使凭证泄露也难以被非法登录。以下是基于Google Authenticator实现SSH双因子认证的完整配置方案。
启用Google Authenticator PAM模块
大多数
Linux发行版都支持通过`libpam-google-authenticator`包来集成TOTP(基于时间的一次性密码)验证。
- Ubuntu/Debian:
sudo apt update && sudo apt install libpam-google-authenticator -y- CentOS/RHEL/AlmaLinux(需 EPEL):
sudo dnf install epel-release -y && sudo dnf install google-authenticator -y安装完成后,为需要开启2FA的用户生成密钥:
2. 切换到目标用户并运行初始化命令:su - usernamegoogle-authenticator执行后会提示一系列问题,建议选择如下配置:
- 是否创建一个基于时间的认证器? → y
- 允许该令牌被使用一次吗? → y(防止重放攻击)
- 时间容差增加(最多 4 分钟)? → y
- 是否禁止多次使用同一令牌? → y
- 是否启用速率限制? → y(防止暴力破解)
完成后会显示二维码链接、密钥、恢复码和备用验证码,请妥善保存。使用Google Authenticator或Authy等APP扫描二维码绑定账户。
配置PAM支持双因素认证
编辑PAM的SSH认证配置文件,使SSH登录时要求二次验证。
编辑文件:sudo nano /etc/pam.d/sshd在文件最前面添加一行(注意顺序):
auth required pam_google_authenticator.so这表示每次SSH认证都需要通过Google Authenticator验证。如果已使用密码或密钥登录验证,此步骤将作为第二层校验。
修改SSH服务配置以支持挑战响应
确保SSH守护进程启用了“ChallengeResponseAuthentication”选项。
编辑SSH主配置文件:sudo nano /etc/ssh/sshd_config确认以下参数设置正确:
ChallengeResponseAuthentication yes-
UsePAM yes(必须启用,否则PAM规则不生效) - 若使用密码登录:
PasswordAuthentication yes - 推荐禁用纯密码登录,仅允许密钥+2FA:
AuthenticationMethods publickey,keyboard-interactive
说明:设置AuthenticationMethods publickey,keyboard-interactive后,用户必须先通过SSH密钥认证,再输入TOTP验证码,实现真正的双因子认证。
重启SSH服务以应用更改:
sudo systemctl restart sshd测试与故障排查
配置完成后,从另一终端尝试SSH登录,观察流程是否包含两步验证。
- 使用SSH密钥连接时,应提示输入“Verification code:”
- 该码来自Google Authenticator APP中对应的条目
- 输入正确后方可登录
常见问题:
-
无法登录且无验证码提示? 检查
UsePAM yes和ChallengeResponseAuthentication yes是否生效 -
PAM报错日志? 查看
/var/log/auth.log(Ubuntu)或/var/log/secure(RHEL) -
时间不同步导致验证码无效? 确保服务器启用NTP同步:
sudo timedatectl set-ntp true
可临时保留一个未启用2FA的管理员会话用于调试,避免被锁在系统外。
基本上就这些。配置得当后,你的Linux服务器SSH登录将具备高强度安全保障。
# linux
# word
# centos
# go
# app
# ubuntu
# dnf
# google
# 配置文件
# linux系统
# var
# ssh
# debian
# 验证码
# 令牌
# 后会
# 重启
# 绑定
# 最多
# 适用于
# 软件包
# 报错
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
微信公众帐号开发教程之图文消息全攻略
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
装修招标网站设计制作流程,装修招标流程?
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
,南京靠谱的征婚网站?
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
如何快速搭建二级域名独立网站?
Laravel如何配置Horizon来管理队列?(安装和使用)
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
浅述节点的创建及常见功能的实现
EditPlus中的正则表达式实战(6)
zabbix利用python脚本发送报警邮件的方法
LinuxShell函数封装方法_脚本复用设计思路【教程】
Laravel如何配置任务调度?(Cron Job示例)
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
中国移动官方网站首页入口 中国移动官网网页登录
奇安信“盘古石”团队突破 iOS 26.1 提权
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
Python进程池调度策略_任务分发说明【指导】
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
长沙做网站要多少钱,长沙国安网络怎么样?
javascript如何操作浏览器历史记录_怎样实现无刷新导航
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
如何快速搭建高效服务器建站系统?
Laravel如何实现文件上传和存储?(本地与S3配置)
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
如何快速重置建站主机并恢复默认配置?
微信小程序 五星评分(包括半颗星评分)实例代码
如何在景安云服务器上绑定域名并配置虚拟主机?
黑客如何利用漏洞与弱口令入侵网站服务器?
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
图册素材网站设计制作软件,图册的导出方式有几种?
PHP 500报错的快速解决方法
🚀拖拽式CMS建站能否实现高效与个性化并存?
如何快速搭建自助建站会员专属系统?
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
如何批量查询域名的建站时间记录?
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
微信h5制作网站有哪些,免费微信H5页面制作工具?
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
高防服务器如何保障网站安全无虞?

