标题:为SSH添加两步验证 出处:Felix021 时间:Tue, 15 Apr 2014 21:42:32 +0000 作者:felix021 地址:https://www.felix021.com/blog/read.php?2133 内容: 今天从@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" ,否则没法正常登录。 Generated by Bo-blog 2.1.0