SSH通过“运维密码”小程序实现 SSH 双因子认证

一、什么是双因子认证

GitHub:https://github.com/LCTT/WeApp-Password
双因子认证(即 2FA),是一种通过组合两种不同的验证方式进行用户身份验证的机制。
在这种多重认证的系统中,用户需要通过两种不同的认证程序:
(1)提供他们知道的信息(如用户名/密码)
(2)再借助其他工具提供用户所不知道的信息(如用手机生成的一次性密码)

二、目的

实现登录Linux 服务器时,除了输入用户名密码外,需要输入一次性的动态口令才能验证成功。

三、在 Linux 系统中安装 Google 身份验证器服务器端组件

生成动态口令的其中一个因素是时间,需要保持终端设备和服务器的系统时间一致,才能生成同一的动态口令
简单说下chrony:chrony 是网络时间协议的(NTP)的另一种实现,与网络时间协议后台程序(ntpd)不同,它可以更快地更准确地同步系统始终。

三、安装前准备

3.1、安装依赖

yum -y nstall gcc make pam-devel libpng-devel libtool wget git

3.2、添加阿里云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

在 CentOS 上安装 Google 身份验证器服务器端组件,启用epel 之后,运行:

yum install google-authenticator

3.3、安装依赖

yum -y install gcc make pam-devel libpng-devel libtool wget git

3.4、安装Qrencode,谷歌身份验证器需要调用该程序生成二维码并显示

yum install -y qrencode

3.5、安装谷歌身份验证器

wget https://github.com/google/google-authenticator-libpam/archive/1.04.tar.gz
 #解压
tar zxvf 1.04.tar.gz
cd google-authenticator-libpam-1.04
 # 进行编译和安装
./bootstrap.sh && ./configure && make && make install

如果构建成功,你会在目录中看到 pam_google_authenticator. 和 和 google-authenticator 两个二进制文件。
在这里插入图片描述
3.6、使用以下命令生成验证密钥
google-authenticator
在这里插入图片描述
生成的二维码:
在这里插入图片描述
**3.7、**在二维码和密钥字符串后面,接着显示了一个当前的校验码和几个紧急密钥。紧急密钥你可以另行保存的一个安全的地方,以防你在无法使用 Google 身份验证器应用或“运维密码”时使用(紧急密钥是 8 位的,不同于普通的 6 位密钥,也是一次性使用的)。
在这里插入图片描述
保存 Google 服务器端组件的配置文件,Google 身份验证器虽然运行了,但是相关设置还没有保存,接下来会提示保存:
在这里插入图片描述
意思是:你想将配置文件更新到 /root/.google_authenticator 保存吗?输入 y 回车。

禁止同一令牌多次登录:
在这里插入图片描述
意思是:你是否要禁用同一密钥多次登录,这将限制你每 30 秒只能使用该密钥登录一次,但这能够让你可以更多地被提醒受到了中间人攻击,甚至能够防止这种攻击。输入 y 回车。

时间容错设置:
在这里插入图片描述
这个可根据实际情况进行配置,一般一分钟就足够了。输入 y回车。

暴力破解防护:
在这里插入图片描述
意思是:为了避免暴力破解,可以启用速率限制,默认情况下,每 30 秒只能尝试 3 次。输入 y回车

配置完成:
配置完成后会在home目录下生成一个权限为 400 的隐藏文件,如下图所示:
在这里插入图片描述
3.8、打开微信小程序:
打开微信,依次点击“发现”,“小程序”,输入“运维密码”并搜索。
点击“运维密码”进入应用,然后点击列表下方的“添加场景”。 这会调起“扫一扫”功能,请扫描配置 google-authenticator 时所生成的二维码,然后会识别出该场景信息,你可以根据需要修改场景信息,点击确定添加场景。
这样 Google 身份验证器就和“运维密码”匹配上了。下面我们要使 SSH 服务可以支持该验证。
3.9、配置SSH服务
添加认证模块
使用如下命令在 /etc/pam.d/sshd 文件添加认证模块
在这里插入图片描述
在 Centos 6.6 或更低的版本中如果遇到无法进行 google-authenticator 验证的情况,请将 auth required pam_google_authenticator.so放在 /etc/pam.d/sshd 文件的最顶端进行测试一下。

配置挑战式密码认证:
在这里插入图片描述

vim /etc/ssh/sshd_config
passwordAuthentication yes
ChallengeResponseAuthentication yes #配置挑战式密码认证 
UsePAM yes
systemctl restart sshd #重启 sshd 服务

切记:服务器时间都得一致,因为这个错误浪费了一些时间。
本文档在centos7-7.2上都测试成功了,不同的环境可能有些小的误差。
参考博客:http://blog.csdn.net/weifangan/article/details/73332029

猜你喜欢

转载自blog.csdn.net/change_can/article/details/84949993
ssh