Apr
15
今天从@Zavior同学那里听说了Google的开源项目Google Authenticator,它除了为Google帐号的两步验证功能提供了对应的app(安卓/iOS/黑莓)之外,还将这个功能开放出来、配套一个PAM模块,使得将两步验证功能代入ssh变得非常简单,回想起以前在B公司实习时用的那个硬件token,那真是又贵又麻烦。
步骤非常简单:
注意:如果是远程操作,请先开启一个应急连接,万一失败了还有救……
0. 安装对应的app,详见项目主页
1. 编译安装(@ubuntu)
$ sudo apt-get install libpam0g-dev libqrencode3 libtool
$ git clone https://github.com/google/google-authenticator.git
$ cd google-authenticator/libpam
$ ./bootstrap.sh && ./configure
$ make && sudo make install
[update@2016-01-04] 不知道从哪个版本开始,在ubuntu下,make install不会把pam模块拷贝到指定地点,需要手工操作:
$ sudo cp .libs/pam_google_authenticator.so /lib/security/
2. 配置openssh
$ sudo vi /etc/pam.d/sshd
#最上方加一行 "auth required pam_google_authenticator.so"
#这个配置可以更复杂一些,加上一些参数,详见 libpam/README
#注:如果遇到仍然需要输入密码的情况,改成 "auth sufficient pam_google_authenticator.so" 试试。
$ sudo vi /etc/ssh/sshd_config
#将 ChallengeResponseAuthentication 选项的 no 改成 yes
$ sudo /etc/init.d/ssh restart
3. 生成密钥
$ google-authenticator #注:运行这个命令的是需要登录的用户,不是root用户
Do you want authentication tokens to be time-based (y/n) y (确认:基于时间的认证token)
【这里会显示生成二维码的地址、二维码、密钥明文、应急码】
Do you want me to update your "/var/www/.google_authenticator" file (y/n) y (确认:更新配置文件)
......
size of 1:30min to about 4min. Do you want to do so (y/n) n (token有效期是1.5min,选y就是4min)
......
Do you want to enable rate-limiting (y/n) y (30s内只允许尝试三次)
4. 在app里扫二维码,或者手动输入密钥,即可看到token每隔30s更新一次了
5. 尝试登录
$ ssh localhost
verification code: 【输入验证码】
password: 【输入密码】
最后,提醒一下使用SecureCRT的同学,你需要在Session Options -> Connection -> SSH2,将Authentication中只选用 "Keyboard Interactive" ,否则没法正常登录。
步骤非常简单:
注意:如果是远程操作,请先开启一个应急连接,万一失败了还有救……
0. 安装对应的app,详见项目主页
1. 编译安装(@ubuntu)
$ sudo apt-get install libpam0g-dev libqrencode3 libtool
$ git clone https://github.com/google/google-authenticator.git
$ cd google-authenticator/libpam
$ ./bootstrap.sh && ./configure
$ make && sudo make install
[update@2016-01-04] 不知道从哪个版本开始,在ubuntu下,make install不会把pam模块拷贝到指定地点,需要手工操作:
$ sudo cp .libs/pam_google_authenticator.so /lib/security/
2. 配置openssh
$ sudo vi /etc/pam.d/sshd
#最上方加一行 "auth required pam_google_authenticator.so"
#这个配置可以更复杂一些,加上一些参数,详见 libpam/README
#注:如果遇到仍然需要输入密码的情况,改成 "auth sufficient pam_google_authenticator.so" 试试。
$ sudo vi /etc/ssh/sshd_config
#将 ChallengeResponseAuthentication 选项的 no 改成 yes
$ sudo /etc/init.d/ssh restart
3. 生成密钥
$ google-authenticator #注:运行这个命令的是需要登录的用户,不是root用户
Do you want authentication tokens to be time-based (y/n) y (确认:基于时间的认证token)
【这里会显示生成二维码的地址、二维码、密钥明文、应急码】
Do you want me to update your "/var/www/.google_authenticator" file (y/n) y (确认:更新配置文件)
......
size of 1:30min to about 4min. Do you want to do so (y/n) n (token有效期是1.5min,选y就是4min)
......
Do you want to enable rate-limiting (y/n) y (30s内只允许尝试三次)
4. 在app里扫二维码,或者手动输入密钥,即可看到token每隔30s更新一次了
5. 尝试登录
$ ssh localhost
verification code: 【输入验证码】
password: 【输入密码】
最后,提醒一下使用SecureCRT的同学,你需要在Session Options -> Connection -> SSH2,将Authentication中只选用 "Keyboard Interactive" ,否则没法正常登录。