使用Google身份验证进行ssh二次验证

公司大佬上个礼拜展示了这一黑科技..惊呆了 😮..于是我也想搞一个玩玩..

目前好像只对ssh root@xx.xx.xx.xx 这种方式有效果..如果是秘钥登录的..好像没效果

安装

编辑/etc/selinux/config文件,关闭selinux

SELINUX=disabled

yum安装相关程序

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

安装Qrencode

yum install mercurial

克隆项目

使用git clone下载google-authenticator-libpam,安装google authenticator PAM插件

git clone https://github.com/google/google-authenticator-libpam.git
# 或者wget也可以
wget https://github.com/google/google-authenticator-libpam/archive/1.05.tar.gz

进入google-authenticator-libpam目录下,执行脚本

./bootstrap.sh && ./configure && make && make install

复制google 身份验证器pam模块到系统下

cp /usr/local/lib/security/pam_google_authenticator.so /lib64/security/

配置/etc/pam.d/sshd文件

认证模块添加,你加的顺序就是认证的验证步骤,你放在auth-password下面,就是先输入密码,再二次校验

# 在auth required pam_sepermit.so下加入
auth required pam_google_authenticator.so

修改SSH服务配置/etc/ssh/sshd_config文件

AuthenticationMethods 这个选项是用来设置你的那些登录方式要走验证, 因为默认是密码登录才会走二次认证的

# 允许交互
ChallengeResponseAuthentication yes
# 增加认证方法,默认只有密码认证才需要输入验证码,增加之后,有公钥也需要输入验证码
# AuthenticationMethods publickey,password publickey,keyboard-interactive

重启ssh服务

systemctl restart sshd

切换到需要验证的系统账户,运行程序

google-authenticator
Do you want authentication tokens to be time-based (y/n) y
.....
这里是贼大一个二维码..你可以用 Authenticator 直接扫描
....

#如果在手机的谷歌身份验证器上不想通过"扫描条形码"的方式添加,就输入这个key,通过"手动输入验证码的方式"。账号就是服务器主机名。
Your new secret key is: .....EOQ5DHLHDV2FC5DRE.......  
Your verification code is 013927

# 下面会生成5个紧急验证码(当无法获取动态验证码或验证码不能使用使用可以使用这5个)
# 需要注意的是:这5个验证码用一个就会少一个!请保存好!
Your emergency scratch codes are:
  35996600
  25027800
  61532200
  13850400
  40198300

#提示是否要更新验证文件,选择y
Do you want me to update your "/root/.google_authenticator" file (y/n) y       

#禁止使用相同口令
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    

#默认动态验证码在30秒内有效,由于客户端和服务器可能会存在时间差,可将时间增加到最长4分钟,是否要这么做:这里选择是n,继续默认30秒

By default, tokens are good for 30 seconds and 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 1:30min to about 4min. Do you want to do so (y/n) n

#是否限制尝试次数,每30秒只能尝试最多3次,这里选择y进行限制
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 

登录服务器

这时候一定要重新开一个命令行,之前设置二次验证那个命令行一定不能关..万一关了 你上不去.. 那就只能去云后台改了..

Verification code: 这里看到,就要用二次验证了...😆.

$ ssh root@xx.xx.xx.xx
Verification code:
Password:

问题

如何秘钥+二次验证[未解决]

一下是可以参考的文章

参考文章