转载自:https://mp.weixin.qq.com/s/ssuhFbfaHxxzGmLg6Y2MjA

目前来说,二次验证(这里就不做过多解释了)是比较常用的安全手段,通过设置二次验证(谷歌或其他工具),就可以有效的避免账户密码的泄露导致的安全问题。因为,每次登陆前都需要获取一次性验证码,如果没有验证码的话就无法成功登陆。

1、安装 PAM 模块

# 时间与客户端进行校验
$ ntpdate pool.ntp.org # Ubuntu
$ sudo apt install -y libpam-google-authenticator # CentOS7
$ yum install -y epel-release
$ yum install -y google-authenticator

2、生成二次验证代码

# 生成验证码, 哪个账号需要动态验证码,请切换到该账号下操作

# -t: 使用 TOTP 验证
# -f: 将配置保存到 ~/.google_authenticator 文件里面
# -d: 不允许重复使用以前使用的令牌
# -w 3: 使用令牌进行身份验证以进行时钟偏移
# -e 10: 生成 10 个紧急备用代码
# -r 3 -R 30: 限速 - 每 30 秒允许 3 次登录 $ google-authenticator -t -f -d -w 3 -e 10 -r 3 -R 30
Warning: pasting the following URL into your browser exposes the OTP secret to Google:
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/vagrant@vagrant%3Fsecret%3DKZ7QPA11115XTQJQGBFWAIUJBY%26issuer%3Dvagrant
Your new secret key is: KZ7xxx7EI5123xxx123
Your verification code is 90xx71
Your emergency scratch codes are:
1571xx03
9968xx56
2319xx89
8321xx97
9730xx15
3424xx23
5667xx03
9408xx86
7502xx41
4677xx14

3、配置 SSH 服务启用两步验证

# 启用两步验证
$ sudo vim /etc/pam.d/sshd
# @include common-auth # 将禁用密码身份验证
auth required pam_google_authenticator.so # 禁用密码验证 # 修改SSH配置文件
$ sudo vim /etc/ssh/sshd_config
Port 1090
ChallengeResponseAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive # 重启SSH服务
$ sudo systemctl restart ssh.service

4、配置 sudo 二次验证

# 保存并退出
$ sudo vim /etc/pam.d/common-auth
auth required pam_google_authenticator.so # 重启SSH服务
$ sudo systemctl restart ssh.service

5、手机安装 Google 身份验证器

  1. 通过此工具扫描上一步生成的二维码图形,获取动态验证码
  2. 之后,就可以使用手机进行二次认证了,才能登陆服务器了

6、使用 Fail2ban 去屏蔽多次尝试密码的 IP

# 安装软件
$ sudo apt install -y fail2ban
# 配置文件
$ vim /etc/fail2ban/jail.local
[DEFAULT]
ignoreip = 127.0.0.1/8
bantime = 86400
findtime = 600
maxretry = 5
banaction = firewallcmd-ipset
action = %(action_mwl)s [sshd]
enabled = true
filter = sshd
port = 1090
action = %(action_mwl)s
logpath = /var/log/secure # 重启服务
$ systemctl restart fail2ban

7、从二次验证锁定中恢复

# 禁用特定用户的二步验证(无法访问身份验证器应用程序)
$ sudo vim /etc/ssh/sshd_config
AuthenticationMethods publickey,keyboard-interactive
AuthenticationMethods publickey # 重启SSH服务
$ sudo systemctl restart ssh.service

给 SSH 启用二次身份验证的更多相关文章

  1. 无法在web服务器上启动调试。调试失败,因为没有启用集成windows身份验证

    ----注意:以管理员身份运行VS C#中ASP.NET Web应用程序编译时的错误:无法在web服务器上启动调试.调试失败,因为没有启用集成windows身份验证. 解决:打开IIS,在IIS里查看 ...

  2. Shiro笔记(二)身份验证

    Shiro笔记(二)身份验证 一.核心代码 @Test public void helloWorldTest(){ IniSecurityManagerFactory factory = new In ...

  3. 解决 SQL Server 所有帐号无 sysadmin 权限,且未启用 SQL Server 身份验证,sa 帐号也未启用的问题

    解决 未启用 SQL Server 身份验证 的问题: 1. 运行 regedit,进入注册表编辑器 2. 打开:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Micro ...

  4. SSH登录启用Google二次身份验证

    一般来说,使用ssh远程登录服务器,只需要输入账号和密码,显然这种方式不是很安全.为了安全着想,可以使用GoogleAuthenticator(谷歌身份验证器),以便在账号和密码之间再增加一个验证码, ...

  5. Linux下部署SSH登录时的二次身份验证环境记录(利用Google Authenticator)

    一般来说,使用ssh远程登录服务器,只需要输入账号和密码,显然这种方式不是很安全.为了安全着想,可以使用GoogleAuthenticator(谷歌身份验证器),以便在账号和密码之间再增加一个验证码, ...

  6. shiro系列二、身份验证和授权

    一.身份验证 先来看看身份验证的流程 流程如下: 1.首先调用Subject.login(token)进行登录,其会自动委托给Security Manager,调用之前必须通过SecurityUtil ...

  7. shiro学习(二)身份验证

    身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明. 在shiro中,用户需要提供principals (身份)和cre ...

  8. webapi框架搭建-安全机制(二)-身份验证

    webapi框架搭建系列博客 身份验证(authentication)的责任是识别出http请求者的身份,除此之外尽量不要管其它的事.webapi的authentication我用authentica ...

  9. .net core使用ocelot---第二篇 身份验证

    简介原文链接      .net core使用ocelot---第一篇 简单使用 接上文,我将继续介绍使用asp.net core 创建API网关,主要介绍身份验证(authentication )相 ...

随机推荐

  1. net core 3.1使用identityServer登录时signin-oidc报Correlation failed的解决方法

    此问题全网找了很久,也困扰了我很久,始终没有找到解决方法.今天结合网上其他问题的帖子,自己研究的半天,终于找到了这个解决方法,经亲自测试可行.欢迎大牛指导指正. 有时客户收藏的系统地址是认证端的,然后 ...

  2. Apache DolphinScheduler新一代分布式工作流任务调度平台实战-上

    概述 定义 dolphinscheduler 官网地址 https://dolphinscheduler.apache.org/ dolphinscheduler GitHub地址 https://g ...

  3. OS模块中获取当前文件的绝对路径的相关方法

    os.path.realpath(__file__) 作用:获取当前执行py脚本的绝对路径(在当前工作目录下的绝对路径) __file__ : 表示当前文件的本身,一般值是当前文件的相对路径 例如: ...

  4. 巨变!a16z 关于新一代数据基础设施架构的深度洞察

    点击上方 蓝字关注我们 来源 | a16z 作者 | Matt Bornstein, Martin Casado,Jennifer Li 翻译 | 夕颜 作为未来最重要的基础设施之一,数据正在成为各行 ...

  5. Luogu3919 【模板】可持久化数组(主席树)

    主席树模板题,注意空间\((n+m) \log(n)\) #include <iostream> #include <cstdio> #include <cstring& ...

  6. java-重载、包修饰词以及堆栈管理

    1.方法的重写(Override):重新写.覆盖 1)发生在父子类中,方法名称相同,参数列表相同,方法体不同 2)重写方法被调用时,看对象的类型2.重写与重载的区别: 1)重写(Override): ...

  7. 介绍下Java内存区域(运行时数据区)

    介绍下Java内存区域(运行时数据区) Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域.JDK 1.8 和之前的版本略有不同. 下图是 JDK 1.8 对JV ...

  8. xray+awvs的联动

    前言:xray是一款强大的漏扫工具,配合awvs的爬站功能可以十分轻松实现全自动挖洞,这里awvs我是使用的是12版本 1.启动xray,监听本地指定端口,这里我监听的是2222端口 命令:xray_ ...

  9. 蕞短鹭(artskjid) (⭐通信题/模拟⭐)

    文章目录 题面(过于冗长,主要是对通信题的一些解释) 题解 1.通信题什么意思 2.此题题解 CODE 实现 题面(过于冗长,主要是对通信题的一些解释) 题解 1.通信题什么意思 并不是两个程序同时跑 ...

  10. String与StringBuilder相互转换以及获取字符串中第一个中文汉字

    String与StringBuilder相互转换 1. StringBuilder转为String StringBuilder sb = new StringBuilder(); sb.append( ...