centos7或8安装google-authenticator身份令牌

2023-11-05

1. 系统基础环境

说明:使用云服务器安装与本地系统两种方式安装google-authenticator
基于云服务器centos7

[root@linux-tes ~]# lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	CentOS
Description:	CentOS Linux release 7.6.1810 (Core) 
Release:	7.6.1810
Codename:	Core

centos8 官网镜像版本 CentOS-8.1.1911-x86_64-dvd.iso,本地Windows系统 Virtualbox安测试

[root@linux-tes ~]# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core) 

2. 安装 google-authenticator

2.1. 云服务器安装google-authenticator

直接使用命令

yum install google-authenticator #云服务器安装只有一个命令很简单

2.2. 本地google-authenticator源码安装

2.2.1本地安装直接步骤:

说明: 使用的直接安装,采用报什么错误,解决在继续安装,不想看到以下错误,请直接使用最后面的 本地安装全步骤 ,全步骤不会有错误提示。
下载地址

https://github.com/google/google-authenticator-libpam

下载zip包,并解压目录“google-authenticator-libpam-master”传到centos系统中
如果安装git,可以直接clone到centos系统中

git clone https://github.com/google/google-authenticator-libpam.git

在这里插入图片描述进入google-authenticator目录,源码安装

cd google-authenticator-libpam-master/  #进入目录
chmod +x bootstrap.sh  #设置可执行权限
./bootstrap.sh  

在这里插入图片描述
解决bootstrap.sh错误,如上图

yum install automake  #上面图的错误需要安装automake
./bootstrap.sh  

在这里插入图片描述
解决bootstrap.sh错误,如上图

yum install libtool  #上面图的错误需要安装libtool  这个工具会自动安装gcc
./bootstrap.sh  

#安装libtool自带其他依赖
#(1/9): isl-0.16.1-6.el8.x86_64.rpm                      155 kB/s | 841 kB     00:05    
#(2/9): libmpc-1.0.2-9.el8.x86_64.rpm                    147 kB/s |  59 kB     00:00    
#(3/9): libtool-2.4.6-25.el8.x86_64.rpm                  240 kB/s | 709 kB     00:02    
#(4/9): glibc-devel-2.28-72.el8.x86_64.rpm               191 kB/s | 1.0 MB     00:05    
#(5/9): glibc-headers-2.28-72.el8.x86_64.rpm             263 kB/s | 469 kB     00:01    
#(6/9): kernel-headers-4.18.0-147.5.1.el8_1.x86_64.rpm    332 kB/s | 2.7 MB     00:08    
#(7/9): libxcrypt-devel-4.1.1-4.el8.x86_64.rpm           77 kB/s |  25 kB     00:00    
#(8/9): cpp-8.3.1-4.5.el8.x86_64.rpm                     351 kB/s |  10 MB     00:30    
#(9/9): gcc-8.3.1-4.5.el8.x86_64.rpm                     628 kB/s |  23 MB     00:38

bootstrap.sh脚本执行完成,执行configure命令

./configure  #执行会报下面错误 默认安装到当前目录
#./configure  --prefix=/opt 指定安装目录

在这里插入图片描述
执行configure报错,如上图

yum install pam-devel  #上面图的错误需要安装pam-deve
./configure

在这里插入图片描述
安装make且完成configure

yum install make  #上面图错误与make没有安装相关,
#如果使用提示中的参数 ./configure --disable-dependency-tracking,虽然成功,后面执行make也提示 (-bash: make: command not found)
./configure 
#以下是安装成功提示
#google-authenticator version 1.08
#  Prefix.........: /usr/local
#  Debug Build....: 
#  C Compiler.....: gcc -g -O2 -Wall 
#  Linker.........: /usr/bin/ld -m elf_x86_64  -ldl

编译安装google-authenticator

make
make install 

2.2.2本地安装全步骤

yum install automake libtool  pam-devel qrencode make git 
# automake libtool  pam-devel 是google-authenticator需要的。libtool中依赖gcc
# qrencode 可以不用安装,如果没有安装,在运行goole-authenticator时候不会显示二维码图
#本地系统没有make命令所有加了make。git使用用于下载google-authenticator源码
git clone https://github.com/google/google-authenticator-libpam.git #下载google-authenticator源码
cd google-authenticator-libpam/ #进入目录
./bootstrap.sh  #执行脚本
./configure   #执行configure
 make  #执行
 make install #执行安装

3. 运行google-authenticator

google-authenticator  # 回车进入相关提示

出现了“Failed to use libqrencode to show QR code visually for scanning”,
该错误是由于没有安装qrencode,如果安装会显示二维图图片,不影响使用
在这里插入图片描述说明:二维码图片只是方便手机app直接扫描添加添加令牌,没有二维码,只能手动输入密钥信息,如Your new secret key is: GAKNYQ6EUL3Y4L46ZLUQDZTGS4,这个GAKNY开头密钥信息输入到手机令牌中。
在这里插入图片描述
没有安装qrencode的全部步骤,如下图:
在这里插入图片描述

4.修改centos系统配置

vi /etc/ssh/sshd_config   #编辑文件sshd_config
ChallengeResponseAuthentication yes   #修改成yes
vi /etc/pam.d/sshd  #编辑文件sshd
#增加一行
auth       required     pam_google_authenticator.so  #增加

#重启 到此安装结束
service sshd restart 

4.1.注意事项:

/etc/pam.d/sshd增加的说明
#官网建议是
auth required pam_google_authenticator.so nullok #增加一行 
#翻译不标准,就采用以下官网原话
#During the initial roll-out process, you might find that not all users have created a secret key yet. If you would still like them to be able to log in, you can pass the "nullok" option on the module's command line:
#其他说明参考官网,链接在最后面
注意/etc/pam.d/sshd配置文件增加的顺序

登陆的时候先输入密码,然后再输入验证码。

auth       substack     password-auth #文件中有的
auth       required     pam_google_authenticator.so  #增加一行 

登陆的时候先输入验证码,然后再输入密码

auth       required     pam_google_authenticator.so  #增加一行 
auth       substack     password-auth #文件中有的
严重注意事项:千万不要断开ssh链接,在去尝试是否可以使用手机令牌登陆。如果安装成功,但不能使用,导致无法登陆。这就麻烦了,建议是另开一个链接窗口测试手机令牌是否可以正常使用。本人在云服务器上安装使用没有任何错误,但本地安装一直无法登录,查看日志/var/log/secure才发现问题,问题解决在最后面。

4.手机app添加安全令牌

直接在app应用商城里搜索下载Google Authenticator,大部分都支持

  1. Google Authenticator
  2. 阿里云app(虚拟MFA)
  3. Microsoft Authenticator
  4. 等等,只要是手机令牌,基本上可以扫码或人工输入添加令牌

建议提前下载安装app,在运行google authenticator可以验证,在以下步骤中

Enter code from app (-1 to skip):    #这个提示在上面操作步骤是输入-1跳过,手机app可以添加之后,在这里输入6位验证码使用。
#错误:将一直让你输入。
#成功:将提示,Code confirmed  并显示Your emergency scratch codes are:42176283 ...

4.1.部分app使用截图

Microsoft Authenticator:
在这里插入图片描述
Google Authenticator:
在这里插入图片描述
阿里云app(虚拟MFA):
在这里插入图片描述

5. 使用测试

使用的xsheel链接ssh测试,选择keyboard Interactvie(I) 使用键盘输入用户身份验证
在这里插入图片描述
自动会弹出以下两个框,这个两个框的顺序与/etc/pam.d/sshd这个文件配置顺序有关。
在这里插入图片描述

6. 可能出现以下错误

云服务安装没有该错误,但本地安装有此错误。
登陆的时候,监控登陆日志 tail -f /var/log/secure 可以看到以下错误

Mar  4 08:14:57 localhost sshd[32346]: PAM unable to dlopen(/usr/lib64/security/pam_google_authenticator.so): /usr/lib64/security/pam_google_authenticator.so: cannot open shared object file: No such file or directory
Mar  4 08:14:57 localhost sshd[32346]: PAM adding faulty module: /usr/lib64/security/pam_google_authenticator.so

解决办法

find / -name "pma_google*.so"  #查找该文件在哪里
ln -s /usr/local/lib/security/pam_google_authenticator.so /usr/lib64/security/pam_google_authenticator.so 
 #建立软连接,以路径的形式存在。类似于Windows操作系统中的快捷方式
 #ln语法: ln [参数][源文件或目录][目标文件或目录]

在这里插入图片描述

官网地址

https://github.com/google/google-authenticator-libpam

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

centos7或8安装google-authenticator身份令牌 的相关文章

  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • 将 PDF 转换为 600dpi 的 TIFF 和 jpg 96 dpi

    我想使用 ImageMagick 从 Python 脚本将 pdf 转换为 600 dpi 的 tiff 和 96 dpi 的 jpg 我使用 imagemagick 命令行完成了这项任务 但我想使用python中的Imagemagick将
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • jq中如何分组?

    这是 json 文档 name bucket1 clusterName cluster1 name bucket2 clusterName cluster1 name bucket3 clusterName cluster2 name bu
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • CoAP数据包的大小是多少?

    我是这项技术的新手 有人可以帮助我了解一些疑问吗 Q 1 CoAP数据包的大小是多少 我知道有 4 字节固定标头 但是包括标头 选项和负载在内的最大大小限制是多少 Q 2 有像MQTT那样的Keep Alive的概念吗 它在UDP上工作 它
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • 按进程名称过滤并记录 CPU 使用情况

    Linux 下有选项吗顶部命令 https www man7 org linux man pages man1 top 1 html我可以在哪里按名称过滤进程并将每秒该进程的 CPU 使用情况写入日志文件 top pgrep 过滤输出top
  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • 如何减去两个 gettimeofday 实例?

    我想减去两个 gettimeofday 实例 并以毫秒为单位给出答案 这个想法是 static struct timeval tv gettimeofday tv NULL static struct timeval tv2 gettime
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg

随机推荐

  • ENet分割笔记

    https github com cswhshi segmentation blob master ENet py 权重1 21m 但是内存占用较大 2080ti上batch size为8 coding utf 8 import torch
  • 菜鸟学习历程【17】进程控制编程

    进程控制编程 进程 进程是一个具有一定独立功能的程序的一次运行活动 同时也是资源分配的最小单元 进程 程序 程序执行的实例 放到磁盘的可执行文件 进程不可在计算机之间迁移 程序通常对应着文件 静态和可以复制 动态 静态 暂时 进程是一个状态
  • Unity Transparent Video

    https medium com pofu lu unity transparent video E7 94 A8 videoplayer E6 88 96 avpro E6 92 AD E6 94 BE E9 80 8F E6 98 8E
  • 增量式爬虫

    增量式爬虫 增量式爬虫项目 1 新建爬虫项目 2 配置setting py文件 3 创建爬虫文件 3 1 新建爬虫文件的时候将命令换成 3 2 确定要爬取的网页的url 爬取读书网信息 查找url规律 查看底部的导航栏 右键检查元素 不能确
  • protobuf生成golang和grpc代码踩坑记

    错误提示 seems to be defined in proto which is not imported by proto To use it here please add the necessary import 这个地方主要是因
  • 计算机度分秒在线,角度计算器度分秒在线

    角度计算器度分秒在线是一款数学公式计算器软件 对于想要找到正确的答案 计算器可以直接帮助你 你只需要按照要求输入对应的数字 计算器就会帮你准确快速的算出答案 现在手机app下载就能长期免费使用 角度计算器度分秒在线使用说明 输入一 此输入必
  • 【细节】Vue3基本使用笔记

    vite 文档 https cn vitejs dev guide 安装 使用 NPM npm create vite latest 使用 Yarn yarn create vite 使用 PNPM pnpm create vite 选择项
  • atd服务报错 Failed with result ‘exit-code‘

    有需求需要测试下 at 单次计划任务 系统环境 isoftserveros v5 1 oe1 aarch64 系统默认没有at软件包 使用本地yum源安装 yum y install at 安装完后不小心执行了下atd atd 因为at计划
  • 嵌入式设计中对于只有两种状态的变量存储设计,如何高效的对循迹小车进行偏差量化

    前言 1 在嵌入式程序设计中 我们常常会要对各类传感器进行数据存储 大多时候的传感器 例如红外光传感器 返回的数据要么是0 要么是1 因此 只需要一bit就能够存储 而很多人却常常使用char型数组存储 这样真正申请到的内存只使用了八分之一
  • Java基础-内部类

    注意 在成员内部类中访问所在外部类对象 格式 外部类名 this
  • ARP代理

    一个物理网络子网中的源主机向另一个物理网络子网中的目的主机发送ARP Request 和源主机直连的网关用自己接口的mac地址代替目的主机回复 arp reply 这个过程成为arp代理 arp代理的几种方式以及每种方式针对的问题如下图所示
  • 2023届电子设计大赛E题(控制类)

    先上视频 1 首先我们来看看题目 题目还是比较简单明白的 基础题只需要用到一个云台去做这个题目 发挥题需要用到两个云台去解决 首先前几题除了写死没有更好的办法了 我们直接来说一下发挥题怎么做吧 怎么去解决这个问题吧 做发挥题的时候我是遇到了
  • 西电B测——基于simulink的2PSK和2DPSK调制解调系统实现

    这是学校的B级测试实验 仅供学习交流使用 误码率曲线绘制需要用到bertool工具 bertool工具教程 通信专业Simulink 画误码率曲线 使用bertool工具 Enpiyahh的博客 CSDN博客 simulink误码率曲线 报
  • MySQL中对于事务完整的超详细介绍

    MySQL事务详细理解 一 事务基本介绍 1 什么是事务 2 为什么出现事务 3 事务四大特性 原子性 一致性 隔离性 持久性 4 事务的隔离级别 四种级别 不同隔离级别所具有的问题 二 操作演示 1 自动提交和手动提交 2 回滚操作 3
  • 组和OU介绍

    组和OU介绍 https daiker gitbook io windows protocol ldap pian 9 0x00 前言 这篇文章主要介绍AD里面的组和组织单位 OU 0x01 一些LDAP高级搜索语法 1 LDAP 查找中的
  • argparse.ArgumentParser()用法解析

    此模块有中文文档 建议看到此文的读者链接到中文文档查看 本文只是自己学习 个人理解的重点总结 argparse模块 官方文档 argparse是一个Python模块 命令行选项 参数和子命令解析器 argparse 模块可以让人轻松编写用户
  • unable to access android sdk add-on list解决方案

    unable to access android sdk add on list解决方案 问题 原因 解决方案 1 配置Proxy 2 跳过检测 在Android Studio的安装目录下 找到 bin idea properties 在尾
  • List集合遍历过程中修改元素,这个坑踩一次就够了

    简介 java系列技术分享 持续更新中 初衷 一起学习 一起进步 坚持不懈 如果文章内容有误与您的想法不一致 欢迎大家在评论区指正 希望这篇文章对你有所帮助 欢迎点赞 收藏 留言 更多文章请点击 文章目录 问题描述 一 将List集合中的每
  • 华为OD机试 - 找单词(Python)

    题目描述 给一个字符串和一个二维字符数组 如果该字符串存在于该数组中 则按字符串的字符顺序输出字符串每个字符所在单元格的位置下标字符串 如果找不到返回字符串 N 1 需要按照字符串的字符组成顺序搜索 且搜索到的位置必须是相邻单元格 其中 相
  • centos7或8安装google-authenticator身份令牌

    1 系统基础环境 说明 使用云服务器安装与本地系统两种方式安装google authenticator 基于云服务器centos7 root linux tes lsb release a LSB Version core 4 1 amd6