Linux下使用ssh动态验证码登陆机器
ssh动态验证码登录机器
Google Authenticator是一个动态验证码程序,兼容各种智能手机平板设备,可以用来做各种帐号的二次验证,增加帐号的安全性。SSH是Linux系统的最重要防线之一,为了防止密码泄露或者被爆破,可以使用Google Authenticator来做二次验证,使用方法也很简单
谷歌身份验证器生成的是动态验证码,默认30秒更新。修改配置,SSH登录必须在输入密码之前输入动态验证码。即使账号和密码泄露,验证码输入错误,仍然无法登录。苹果或者安卓手机端可以安装身份验证器App读取验证码。
操作系统环境
[root@iZ25nmodinrZ ~]# cat /etc/issue \S Kernel \r on an \m
操作步骤如下
1.关闭selinux
[root@iZ25nmodinrZ ~]# sed -i 's@SELINUX=enforcing@SELINUX=disabled@' /etc/selinux/config
注:需要重启生效
[root@iZ25nmodinrZ ~]# setenforce 0
注:临时关闭生效提示警告不影响使用
查看selinux是否关闭
[root@iZ25nmodinrZ ~]# getenforce Disabled
2.安装软件依赖组件
[root@iZ25nmodinrZ ~]# yum -y install gcc make pam-devel libpng-devel libtool wget git
3.添加阿里云epel源
[root@iZ25nmodinrZ ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
4.qrencode安装,谷歌身份验证器要调用那程序生成并显示二维码
[root@iZ25nmodinrZ ~]# yum -y install qrencode
5.安装谷歌身份验证器
[root@iZ25nmodinrZ ~]# mkdir -p /app [root@iZ25nmodinrZ ~]# cd /app [root@iZ25nmodinrZ app]# git clone https://github.com/google/google-authenticator.git Cloning into 'google-authenticator'... remote: Counting objects: 1461, done. remote: Total 1461 (delta 0), reused 0 (delta 0), pack-reused 1460 Receiving objects: 100% (1461/1461), 2.33 MiB | 25.00 KiB/s, done. Resolving deltas: 100% (776/776), done. [root@iZ25nmodinrZ app]# cd google-authenticator/libpam/ [root@iZ25nmodinrZ libpam]# ./bootstrap.sh [root@iZ25nmodinrZ libpam]# ./configure [root@iZ25nmodinrZ libpam]# make [root@iZ25nmodinrZ libpam]# make install [root@iZ25nmodinrZ libpam]# cp .libs/pam_google_authenticator.so /lib64/security/
6.配置PAM,添加谷歌身份验证器PAM模块配置
[root@iZ25nmodinrZ ~]# head -n 2 /etc/pam.d/sshd #%PAM-1.0 auth required pam_google_authenticator.so
7.修改ssh服务配置文件sshd_config
[root@iZ25nmodinrZ libpam]# sed -i 's#^ChallengeResponseAuthentication no#ChallengeResponseAuthentication yes#' /etc/ssh/sshd_config
8.重启ssh服务
[root@iZ25nmodinrZ libpam]# systemctl restart sshd.service
9.生成二次验证码的系统账号后运行验证器程序google-authenticator
,或者切换到相应用户需要需要进行二次验证码的用户,这里我是直接使用root
用户验证
[root@iZ25nmodinrZ ~]# google-authenticator Do you want authentication tokens to be time-based (y/n) y #提示是否要基于时间生成令牌,选择y https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/root@iZ25nmodinrZ%3Fsecret%3D44FOMDL4D5NC7RFJD4CJDDGXFM%26issuer%3DiZ25nmodinrZ
Your new secret key is: 44FOMDL4D5NC7RFJD4CJDDGXFM Your verification code is 770892 Your emergency scratch codes are:2302871312647530287154208254067313054818 #上面的网址为生成的二维码图形地址(需要×××才能打开),还会生成密钥,以及5个紧急验证码(当无法获取动态验证码时使用,注意:这5个验证码用一个就会少一个!请保存好!) Do you want me to update your "/root/.google_authenticator" file? (y/n) y #提示是否要更新验证文件,选择yDo you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) y #禁止使用相同口令By default, tokens are good for 30 seconds. In order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of +-1min (window size of 3) to about +-4min (window size of 17 acceptable tokens). Do you want to do so? (y/n) y #默认动态验证码在30秒内有效,由于客户端和服务器可能会存在时间差,可将时间增加到最长4分钟,是否要这么做:这里选择是n,继续默认30秒If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting (y/n) y #是否限制尝试次数,每30秒只能尝试最多3次,这里选择y进行限制
10.手机安装谷歌身份验证器,苹果手机打开app store
搜索应用Google Authenticator
,安卓系统打开相应的应用进行安装即可,由于我使用的是安卓系统安装的是安卓版的
11.打开APP后点击“开始设置”,扫描终端的二维码,需要安装专用的条码扫描器,其他软件都无法扫描二维码无效,由于我的手机无法番墙,所以只能使用秘钥的方式了
配置好后的身份验证器
12.由于终端使用的是crt,需要进行设置
使用SecureCRT客户端的话,默认情况下会不支持这种验证方式,只要在会话选项中修改SSH—-Authentication,设置为Keyboard Interactive即可,其他的选项包括Password都要去掉
13.使用crt登录
注:使用Publickey免密码登录方式来登录ssh的话,不支持使用Google Authenticator验证,必须是密码验证的登录方式才支持。
转载于:https://blog.51cto.com/noodle/1831697
相关文章:
【C++】枚举类型应用
运行环境:VS2017 可以参考:【C】枚举类型 医院内科有A,B,C,D,E,F,G共七位医生,每人在一周内要值一次夜班,排班的要求: (1ÿ…

量子力学又一突破,中国科学家首次实现量子纠缠态自检验
这也是国际上首个具有“高可靠、抗干扰”特性的纠缠态自检验实验。 最近,量子力学领域又传来好消息,中国科学技术大学的郭光灿院士团队在实验中首次实现了量子纠缠态的自检验,推动了自检验在各种量子信息过程中的基础发展。 何为量子纠缠&a…

awk命令中执行多条shell命令
awk中使用的shell命令,有2种方法:一。使用system()二。使用print cmd | “/bin/bash”http://www.gnu.org/software/gawk/manual/gawk.html#I_002fO-Functions一。使用所以system()awk程序中我们可以使用sy…

LAMP高级环境实战
LAMP架构应用实战介绍LAMP指的Linux(操作系统)、Apache(HTTP 服务器),MySQL(数据库软件) 和PHP(有时也是指Perl或Python) 的第一个字母,一般用来建立web 服务…

【C++】用类来处理排序问题
运行环境:VS2017 由小到大排序 可以看出在主函数中所做的事: (1)定义对象。 (2)向各对象发出“消息”,通知各对象完成有关任务。即调用有关对象的成员函数,去完成相应的操作。 …

winform 弹出窗体位置设定
[转]https://www.cnblogs.com/liushenglin/p/5350641.html 一、C#中弹出窗口位置 加入命名空间using System.Drawing和using System.Windows.Forms假定窗口名为form1,则 form1.StartPosition FormStartPosition.CenterScreen;窗体位置在屏幕中间form1.StartPosition FormSta…
pkg-config工具在实际工程中的用法
在如今这个开源的环境里,想要开发某个功能,我们都会下意识的上网搜索有没有开源库,如果有开源库,那么好,下载下来给它编译好,使用。但是在使用过程中,你是否遇到不知如何将第三方库编译…

linux中pipe
调用pipe函数时在内核中开辟一块缓冲区(称为管道)用于通信,它有一个读端一个写端,然后通过filedes参数传出给用户程序两个文件描述符,filedes[0]指向管道的读端,filedes[1]指向管道的写端(很好记就像0是标准输入1是标准输出一样)。所以管道在用户程序看起来就像一个打开的文通r…
【C++】利用构造函数对类对象进行初始化
运行环境:VS2017 一、对象的初始化 每一个对象都应当在它建立之时就有就有确定的内容,否则就会失去对象的意义。 class Time {int hour 0;int min 0;int sec 0; }; 这种是错误的,类并不是一个实体,并不占储存空间ÿ…

自定义Chrome浏览器
一、全局 自用备份,窗体透明化、要添加对应网站的窗体class到对应的位置 /*主页背景*/ /*https://images.cnblogs.com/cnblogs_com/AardWolf/1350846/o_5900399dcdcbd.jpg*/ /*https://ws4.sinaimg.cn/large/0072Vf1pgy1foxkfzphb2j31hc0u0gvv.jpg*/body { backgrou…

ubuntu添加sudo权限
使用如下命令可以添加到用户组(也可是超级用户组)。 命令如下: sudo usermod -aG 超级用户组名 用户名 例子:sudo usermod -aG sudo username 其中a:表示添加,G:指定组名第二种方法是直接修改,…

File.separator
报告“No such file or diretory ”的异常,上传不了。后来发现是文件路径的问题。模拟测试环境是windowstomcat,而正式的的环境是linuxtomcat,文件路径的分隔符在windows系统和linux系统中是不一样。 比如说要在temp目录下建立一个test.txt文…
【C++】对象数组
运行环境:VS2017 对象数组:每个元素都是同类的对象 如果构造函数只有一个参数,在定义数组时可以直接在等号后面的花括号内提供实参。 Student stud[3]{60,70,80}; 如果构造函数有多个参数,则不能用在定义数组时直接提供所有实…

C# 算法系列一基本数据结构
一、简介 作为一个程序员,算法是一个永远都绕不过去的话题,虽然在大学里参加过ACM的比赛,没记错的话,浙江赛区倒数第二,后来不知怎么的,就不在Care他了,但是现在后悔了,非常的后悔!!!如果当时好好学算法的话,现在去理解一些高深的框架可能会很easy,现在随着C#基础和Web技能的提…

git管理大项目或者大文件
git 是追踪代码库演进的最佳选择,并且它能让你与你的同事间高效协作。当你想要追踪的库非常巨大时会发生什么?在这篇文章里,我会尝试着给你一些想法和技巧来恰当地处理不同种类的大仓库。两种大代码库如果仔细想想,大概会有两种导…

window下java开发环境安装
首先请去Java的官网上下载,最好下载最新版本地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 如图,点击下载java platform(JDK),然后选择接受接受协议(Accept …
【ACM】蛇形填数
先判断,再移动,而不是发现越界了再退回来。 #include "stdio.h" #include "string.h" #define maxn 20 int a[maxn][maxn]; int main() {int n, x, y, tot 0;scanf_s("%d", &n);memset(a, 0, sizeof(a));tot a[x …

Mybatis中Oracle和Mysql的Count字段问题
Mybatis中Oracle和Mysql的Count字段问题 我们在进行项目开发时经常会碰到查询总数的问题,所以我们直接是用select count(1) from table来进行查询。那么在Mybatis通常情况下我们是这么写的 <select id"testCount" resultType"int">select…

为什么free()时不需要传指针大小
malloc()和free()是c中两个非常基本的函数,但这种最基本的东西往往都是特别复杂的。malloc和free的原形如下:void *malloc(unsigned int num_bytes); void free(void *ptr);在c的标准中并没有定义这两个函数的具体实现,在我们最常用的gcc中&a…

redis cluster 安装配置
一、redis集群安装配置1、下载redis源码包并下载wget http://download.redis.io/releases/redis-3.0.7.tar.gz $ tar xzf redis-3.0.7.tar.gz $ cd redis-3.0.7 yum -y install gcc gcc-c libstdc-devel #解决相关依赖关系$ make && make install 因我们安装redis 集…

【ACM】汉诺塔
https://blog.csdn.net/xueerfei008/article/details/9904681

什么是机器人底盘 答案在这里!
机器人底盘承载了机器人本身的定位、导航及避障等基本功能,可帮助机器人实现智能行走,以思岚科技的ZEUS为例,内置SLAMWARE高性能自主定位导航模块,用户可根据实际需要搭载不同的应用,可广泛适用于餐厅、商场、银行、办…

嵌入式linux内存使用和性能优化
这本书有两个关切点:系统内存(用户层)和性能优化。 这本书和Brendan Gregg的《Systems Performance》相比,无论是技术层次还是更高的理论都有较大差距。但是这不影响,快速花点时间简单过一遍。 然后在对《Systems Performance》进行详细的学…

【算法导论】插入排序
循环不变式 在数学上阐述了通过循环(迭代,递归)去计算一个累计的目标值的正确性。 关于循环不变式,我们必须要证明三条性质: 初始化:循环第一次迭代之前,它为真。保持:如果循环的…

gdb+gdbserver
内容摘要 远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接。使用 GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程…

Android开发技巧——去掉TextView中autolink的下划线
我们知道,在布局文件中设置textview的autolink及其类型,这时textivew上会显示link的颜色,并且文字下面会有一条下划线,表示可以点击。而在我们在点击textview时,应用将根据我们所设置的类型跳转到对应的界面。但是有时…

【算法导论】冒泡排序 选择排序
冒泡排序: //从大到小 void bubble_sort(int array[],int len) {int i,j,t;for(i0;i<len-1;i){for(j0;j<len-1-i;j){if(array[j]<array[j1]){tarray[j];array[j]array[j1];array[j1]t;} }} } 选择排序: //从大到小 void select_sort(int a…

监控平台zabbix高级配置
2019独角兽企业重金招聘Python工程师标准>>> 12月26日任务 19.12 添加自定义监控项目 19.13/19.14 配置邮件告警 19.15 测试告警 19.16 不发邮件的问题处理 添加自定义监控项目 zabbix可以自定义监控项目,满足个性化的需求。例如网站注册量、访问量等具体…

linux内存实际占用分析
作者: 黄永兵/译 出处:51CTO.com 阅读提示:本文是为那些经常疑惑的人准备的,“为什么一个简单的KDE文本编辑器要占用25M内存?”导致大多数人认为许多Linux应用程序,特别是KDE或GNOME程序都象ps报告一样臃肿...【51CTO.com独家译文…