当前位置: 首页 > news >正文

给 Linux 主机添加 SSH 双因子认证

GitHub:https://github.com/google/google-authenticator-android
在信息时代,服务器安全愈发成为首要任务。Linux 主机通过 ssh 方式连接,当存在弱密码的情况下,通过暴力破解的方式会很容易就被攻破了,本文将向你展示如何通过 Google Authenticator 这一强大的双因素认证工具,当你 SSH 登录主机输入用户密码后,还需要通过手机客户端输入 Google 动态验证码才能正常登录,通过真实案例教你配置。赶快转发给你的小伙伴用起来~
:::

  1. 同步 Linux 服务器时钟

同步 linux 时钟,默认动态验证码在 30 秒内有效,由于客户端和服务器可能会存在时间差,建议先同步时钟,防止和手机时间存在时间差导致无法登录

ntpdate pool.ntp.org

  1. Linux 主机安装 Google Authenticator

本文使用 CentOS7 系统实验,在终端执行以下命令,为你的 Linux 系统安装 Google Authenticator 插件

yum install epel-release -y
yum install google-authenticator -y

image.png

  1. 修改 SSH 配置

编辑 SSH 配置文件

vi /etc/ssh/sshd_config

确保以下行被设置为 yes

ChallengeResponseAuthentication yes
UsePAM yes

保存并退出

  1. Google Authenticator 初始化

执行以下命令初始配置,为指定用户启动 Google Authenticator 的配置

google-authenticator

在这里插入图片描述

根据提示回答问题,最终将生成一个二维码和一组备用验证码
:::info
访问上面生成的 URL(需要科学上网)
然后使用 **Google 身份验证 **扫码添加
:::

Google 身份验证 APP:
在手机应用市场搜索:身份验证器 或 Authenticator 并安装 APP 或者 也可以使用 微信小程序 MinaOTP

image.png

  1. 调整 PAM 模块

编辑 PAM 配置文件
引入 Google Authenticator 模块 vi 编辑 /etc/pam.d/sshd 配置,
在文件末尾添加以下行

vim /etc/pam.d/sshd
auth required pam_google_authenticator.so

保存并退出

  1. 重启 SSH 服务

为了让新配置生效,别忘了重新启动 SSH 服务

systemctl restart sshd
  1. 安装 Google 身份验证

应用商店下载并安装 Google Authenticator 或类似的身份验证应用,
然后配置 Authenticator App,打开应用,选择添加新的身份验证令牌。
使用步骤 4 生成的二维码扫描或手动输入密钥
添加成功后,此验证码会动态刷新
6edff3f2-7a09-4605-8e95-07c91a56f9e9.jpg

  1. 登录验证

通过以上的步骤,你已成功为 Linux SSH 添加了 Google Authenticator 双因素认证。
后续除了输入用户密码外,还需要输入动态码进行验证 SSH 登录验证
在这里插入图片描述
image.png
image.png
image.png

终端登录

[root@blog .ssh] ssh root@x.x.x.x
Password: 
Verification code: 
Last login: Tue Dec  5 23:33:20 2023 from 113.57.110.120

通过上面可以看到无论是使用终端工具还是命令行,都加上了动态码
赶快将你的 Linux 安排上,让主机安全无懈可击!

相关文章:

  • 性能分析与调优: Linux 文件系统观测工具
  • Hyperledger Fabric 自动发现网络信息 discover 工具使用
  • 低频信号发生器
  • 商业世界,从2023到2024
  • 回顾2023,立2024flag
  • 基于Java (spring-boot)的停车场管理系统
  • 20240112让移远mini-PCIE接口的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通【DTS部分】
  • ActiveMQ:专注消息传递,助您构建高效稳定的系统
  • 人生当努力
  • JUC-线程中断机制和LockSupport
  • 数据结构:队列的链表结构(含完整代码,可复制)
  • docker安装部署Elasticsearch(ES)以及相关配置
  • 井盖异动传感器,守护脚下安全
  • C++之类的静态成员
  • 文件操作(与文件相关)相关笔记
  • 《深入 React 技术栈》
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Bootstrap JS插件Alert源码分析
  • canvas绘制圆角头像
  • Cumulo 的 ClojureScript 模块已经成型
  • go append函数以及写入
  • interface和setter,getter
  • iOS小技巧之UIImagePickerController实现头像选择
  • Object.assign方法不能实现深复制
  • text-decoration与color属性
  • vue的全局变量和全局拦截请求器
  • Wamp集成环境 添加PHP的新版本
  • webpack+react项目初体验——记录我的webpack环境配置
  • 阿里云Kubernetes容器服务上体验Knative
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 详解NodeJs流之一
  • 用element的upload组件实现多图片上传和压缩
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 追踪解析 FutureTask 源码
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 说说我为什么看好Spring Cloud Alibaba
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (附源码)计算机毕业设计大学生兼职系统
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (七)Java对象在Hibernate持久化层的状态
  • (强烈推荐)移动端音视频从零到上手(下)
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)程序员技术练级攻略
  • .net core 连接数据库,通过数据库生成Modell
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .Net8 Blazor 尝鲜
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @Autowired注解的实现原理
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • []Telit UC864E 拨号上网