使用Google Authenticator给ssh进行登录验证

普通情况下的服务器登录,是“服务器+密码”这种直白的验证方式,但是这种方式太过简单,一旦密码泄露,服务器就有危险,于是为了安全我们就要在登录上再加一把锁,那就是使用Google Authenticator(谷歌身份验证器)这个工具,在登录的时候进行一次验证,只有“验证通过了”+“密码正确”才能登陆服务器。

安装前准备:

1)关闭Selinux :#setenforce 0

2)安装依赖:#yum -y install gcc make pam-devel libpng-devel libtool wget git

3)添加阿里云epel 源:

RHEL 6/Centos 6
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RHEL 7/Centos 7
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

4)安装Qrencode,谷歌身份验证器需要调用该程序生成二维码并显示:#yum install -y qrencode

安装谷歌身份验证器

这个时候很多教程会让你去执行#git clone https://github.com/google/google-authenticator.git  ,然而现在这个git里面已经不再含有libpam这个文件夹了,下载下来是一个错误的包,那么这个时候你可以使用#yum install google-authenticator,不过yum安装的身份验证器的版本很老,这个时候可以执行#wget https://github.com/google/google-authenticator-libpam/archive/1.04.tar.gz 。

下载下来1.0.4版本的然后拆包解压缩,里面是这样几个文件:

然后就#./bootstrap.sh && ./configure && make && make install 进行编译和安装。

安装过程完毕之后,还要复制google 身份验证器pam模块到系统下,命令是:#cp /usr/local/lib/security/pam_google_authenticator.so /lib64/security/

调整登陆方式

1)编辑/etc/pam.d/sshd 这个文件,我这个centos的版本是7.0的,里面的内容可能跟centos 6.x的优点不同,不过没关系,就需要插入黄色框内的“auth required pam_google_authenticator.so”,如图:

修改完毕之后,保存退出。

注意!修改了这步之后,服务器千万不能断开连接,否则再连是需要google验证码的,而我们现在还没有生成码,所以肯定是无法连接服务器,如果是云服务器,可以通过登陆控制台的方式把这个文件修改回来,如果是实体服务器,那就呵呵呵了。

2)编辑/etc/ssh/sshd_config,就修改一个地方:ChallengeResponseAuthentication yes

3)保存退出之后,重启一下ssh服务:

RHEL6 /Centos6:Service sshd restart
RHEL7 /Centos7:Systemctl resart sshd

生成登陆验证码

这次以root用户为例,那么切换成root用户执行下面的过程。

1)执行#google-authenticator,由于我们之前已经安装了qrencode,那么这个时候会生成一个超级超级巨大的二维码,给各位感受一下:

红色内容是生成的密钥,很重要。绿色的内容是备用的紧急救助码,紧急救助码就是当你无法获取认证码时(比如手机丢了),可以当做认证码来用,每用一个少一个,但其实可以手动添加的,建议如果 root 账户使用 Google Authenticator 的话一定要把紧急救助码另外保存一份。

Do you want me to update your "/home/test/.google_authenticator" file? (y/n) y

是否更新用户的 Google Authenticator 配置文件,选择 y 才能使上面操作对当前用户生效,其实就是在对应用户的 Home 目录下生成了一个 .google_authenticator 文件,如果你想停用这个用户的 Google Authenticator 验证,只需要删除这个用户 Home 目录下的 .google_authenticator 文件就可以了。

Do 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

每次生成的认证码是否同时只允许一个人使用?这里选择 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) n

是否增加时间误差?这里随便选择, ny都可以。

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

是否启用次数限制?这里选择 y,默认每 30 秒最多尝试登录 3 次。

如果想要写成脚本的话,那么上面交互式的设置也可用通过参数一次性设置:google-authenticator -t -f -d -l [email protected] -i MR.chen -r 3 -R 30 -W。

-I 和 -i是可以随便写的,但是-i后期可以改,-I不能改。

搭配手机端

如果手机是ios,就去apple store里搜索“Google Authenticator”,如果是安卓,就去应用商店搜索“谷歌动态口令”。

安装完后,打开App,点击“开始设置”,选择“扫描条形码”扫描上面 google-authenticator 命令生成的二维码,或者是选择“输入密钥”,然后手机上就能看到对应的六位数认证码了。

最后一步,返回xshell,修改登陆方式,设置登陆方法为Keyboard Interactive,如图:

这个时候,推荐各位保留原有的ssh不要动,在另外一个xshell窗口登陆一下看看效果,如果正常的话,这个时候会看到系统会让你先输入一个Verification code。这个值就是手机里的那个六位数,然后再输入密码,只有两个都是正确的,才能登陆!

至此整个配置完成,如果登陆时遇到问题,请查看日志文件/var/log/secure。

更改存储位置

在生成二维码那一步的时候,如果你错过了记住密钥也不要怕,系统会自动把密钥和紧急救助码保存在~/.google_authenticator这个文件里。

如果想要改变密钥存储位置,请使用--secret参数:#google-authenticator --secret="/文件路径/用户名"

然后更改/etc/pam.d/sshd内的路径配置:

auth required pam_google_authenticator.so user=root secret=/PATH_FOLDER/${USER}

上面那句话里“user=root” 用于强制PAM使用root用户权限来搜索文件。

另外请注意,由于我们当时切换成了root用户,所以密钥文件的所有者是root,生成文件的用户只能读取文件(chmod: 400):

#chown root.root /PATH_FILE/SECRET_KEY_FILES

#chmod 400 /PATH_FILE/SECRET_KEY_FILES

最后的最后,如果您觉得本文对您升职加薪有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多的博文!

时间: 2024-07-30 21:40:10

使用Google Authenticator给ssh进行登录验证的相关文章

Linux 利用Google Authenticator实现ssh登录双因素认证

1.介绍 双因素认证:双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产生的一次性密码来代替传统的静态密码.每个动态密码卡都有一个唯一的密钥,该密钥同时存放在服务器端,每次认证时动态密码卡与服务器分别根据同样的密钥,同样的随机参数(时间.事件)和同样的算法计算了认证的动态密码,从而确保密码的一致性,从而实现了用户的认证.因每次认证时的随机参数不同,所以每次产生的动态密码也不同

ssh 无密码登录验证技术

作为发布程序的BAK服务器,还需有直接发送数据到WEB服务器上的功能,这里使用ssh无密码登录验证技术实现. 首先在要添加信任关系的每台服务器上修改hosts文件 vi /etc/hosts 在下面添加: 把各服务器的IP和主机名一一对应添加,注意区分大小写 LAMP上操作 建立rsa key ssh-keygen -t dsa         //直接一路回车 cd /root/.ssh/ mv id_dsa.pub authorized_keys    //修改公钥 BAK上操作 建立rsa

【Linux】使用Google Authenticator 实现ssh登录双因素认证

一般来说,使用ssh远程登录服务器,只需要输入账号和密码,显然这种方式不是很安全.为了安全着想,可以使用GoogleAuthenticator(谷歌身份验证器),以便在账号和密码之间再增加一个验证码,只有输入正确的验证码之后,再输入密码才能登录.这样就增强了ssh登录的安全性.账号.验证码.密码三者缺一个都不能登录,即使账号和密码正确,验证码错误,同样登录失败.其中,验证码是动态验证码,并且是通过手机客户端自动获取(默认每隔30秒失效一次) Google Authenticator开源版主页 h

GOLANG编写google authenticator双因子用户认证体系

通过google authenticator完成对用户登录后台如:redmine zabbix 等的双因子改造 github地址:https://github.com/liyinda/google-authenticator README编写的很详细啦,欢迎大家使用~if enjoy it ,please star it 原文地址:http://blog.51cto.com/liyinda/2144744

Google Authenticator SSH双重验证技术

    Technology - Site OPS Google Authenticator SSH双重验证技术 管理手册 目  录 第1章引言... 1 1.1 目的... 1 1.2 说明... 1 第2章 SSH 双重验证实现... 2 2.1 基础工作... 2 2.2 配置工作... 2 第3章手机客户端配置... 4 第4章 SSH 登录验证... 6 4.1XSHELL 登录验证... 6 4.2 跳板机登录... 7 4.3 总结... 8 第1章 引言 1.1 目的 SSH 安

SSH使用Google Authenticator二次验证

基本的原理如上图: 客户端在输入code码之后,才可以输入服务器的密码,进行账户验证,方可进入服务器. 实现方式如下: 1. 安装所需组件 # yum -y install mercurial pam-devel 2.  安装qrencode,在Linux上,有一个名为 QrenCode 的命令行工具可以很容易帮我们生成二维码,google authenticator命令行生成二维码就是调用它. # wgethttp://fukuchi.org/works/qrencode/qrencode-3

CentOS 使用 Google Authenticator 登录验证

手机上安装Google身份验证器 安装地址:http://www.wandoujia.com/apps/com.google.android.apps.authenticator2 注意:机器上一定要关闭selinux 1.安装依赖: yum -y install gcc make pam-devel libpng-devel libtool wget git 2.开启EPEL源 yum –enablerepo=epel 3.或者直接安装EPEL源RPM包 # CentOS 6 rpm -Uvh

谷歌验证 (Google Authenticator) 的实现原理是什么?

著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:徐小花链接:http://www.zhihu.com/question/20462696/answer/18731073来源:知乎 开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码. 实现Google Authenticator功能需要服务器端和客户端的支持.服务器端负责密钥的生成.验证一次性密码是否正确.客户端记录密钥后生成一次性密码.

Linux实现ssh双因子登陆,with Google Authenticator

之前听别人说,用了XX家的云,安装一个手机APP,每次登陆需要先验证动态密码,再输入密码,安全性大大提高,实现了传说中的双因子登陆,当时觉得好洋气. 因为之前关注的角度不同,我更多的是从登陆统计以及报警来观察,毕竟让你直接登陆的堡垒机或者跳板机并不多,是我太out,听说过双因子登陆却一直没有去行动,于是心血来潮详细百度谷歌了一些文章,更多的都是通过添加第三方模块增加二次验证,于是几个较为出名的就来了:谷歌认证google-authenticator,freeotp,洋葱令牌,对比了一下名字,发现