centos ssh auth google authenticator

Centos using Google Authenticator to achieve user two-factor authentication

1. 安装编译环境

1.1. 通过 yum 安装 部分依赖组件

1
yum install gcc wget pam-devel libpng-devel libtool

1.2. 安装 git & qrcode 工具

1
yum install git qrencode

2. 下载 google-authenticator-libpam 源码

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

3. 编译安装 google-authenticator-libpam

1
2
3
4
5
6
7
8
9
10
pushd google-authenticator-libpam
./bootstrap.sh
./configure
make
make install
popd
# 默认安装路径为/usr/local/lib/security/
# 需要链接/拷贝到pam.d的lib中 centos6为/lib64/security/
ln -s /usr/local/lib/security/pam_google_authenticator.so /lib64/security/pam_google_authenticator.so

4. google-authenticator 生成认证token & sshd 相关配置

4.1. 非交互模式生成token

1
2
3
4
5
6
google-authenticator [<options>]
-c, --counter-based # 基于计数器生成动态码(可以忽略时间差错误)
-t, --time-based # 基于时间生成动态码
-R, --rate-time=M # 设置登录频率限制的时间间隔
-w, --window-size=W # 设置时间窗的大小,主要在移动设备的时间不是准确同步的情况下比较有用

4.2. 交互模式生成token

1
2
3
4
5
6
7
8
9
```
## 编辑 /etc/pam.d/sshd 加入 google-authenticator 认证模块
```bash
#%PAM-1.0
auth required pam_google_authenticator.so # <-- 第一行添加一条规则
auth required pam_sepermit.so
...
session include password-auth

4.3. 编辑 /etc/ssh/sshd_config

1
2
3
4
# 将以下几项,设为yes
PasswordAuthentication yes
ChallengeResponseAuthentication yes
UsePAM yes

4.4. 重启 sshd

1
/etc/init.d/sshd restart

5. 进阶 设定

  • 指定 ip 免二次验证

5.1. 编辑 /etc/pam.d/sshd

1
2
3
#%PAM-1.0
auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-localhost.conf # <-- 第一行添加以下内容
auth required pam_google_authenticator.so

5.2. 编辑/新建配置文件 /etc/security/access-localhost.conf

1
2
3
+ : ALL : 192.168.1.0/24
+ : ALL : LOCAL
- : ALL : ALL