ssh 使用google authenticator 做为二次认证

  • google 实现TOTP(基于时间认证)原理
    1.用户须要开启Google Authenticator服务时,服务器随机生成一个相似于
    『DPI45HKISEXU6HG7』的密钥,而且把这个密钥保存在.google_authenticator中。
    2.客户端扫描二维码,把密钥『DPI45HKISEXU6HG7』保存在客户端,同
    时客户端也能够手动输入密钥,生成验证码html

  • 如何认证
    1.客户端每30秒使用密钥『DPI45HKISEXU6HG7』和时间戳经过一种『算法』
    生成一个6位数字的一次性密码,如『684060』
    2.用户登录时输入一次性密码『684060』
    3.服务器端使用保存在.google_authenticator中的密钥『DPI45HKISEXU6HG7』
    和时间戳经过同一种『算法』生成一个6位数字的一次性密码。你们都懂控制
    变量法,若是算法相同、密钥相同,又是同一个时间(时间戳相同),那么客
    户端和服务器计算出的一次性密码是同样的。服务器验证时若是同样,就登陆
    成功了
  • 安装(centos7)
    1.install
    a.增长epel repo 算法

    yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

    #  yum install google-authenticator
            b.修改ssh配置,vim /etc/ssh/sshd_config 修改以下
                    #ChallengeResponseAuthentication yes   ###容许交互
                    #AuthenticationMethods publickey,password publickey,keyboard-interactive     #增长认证方法,默认只有密码认证才须要输入验证码,增长以后,有公钥也须要输入验证码
                    #重启服务 systemctl restart sshd
             c.在认证文件/etc/pam.d/sshd增长以下内容
                 #auth       required      pam_google_authenticator.so nullok   #auth  substack password-auth 放于先后取决于先输入验证码仍是先输入密码
              d.生成认证文件
                    #google-authenticator -t -d -f -r 3 -R 30 -W  #生成文件在当前家目录的.google_authenticato,同时也会弹出生成的条形码及5次紧急验证码,5次验证码使用一次少一次
                    #用cat .google_authenticator 打开文件后,其实内容很简单,第一行是认证生成的密钥,包括认证方法,时间等参数
                    #也能够一步一步生成,参考文档:https://shenyu.me/2016/09/05/centos-google-authenticator.html
  • 面临的问题
    1. 若是认证文件都每一个用户的加目录下,若是用户删除文件.google_authenticator以后怎么办?难道写监控脚本按期check文件是否存在及文件有无被修改,对于这个问题,能够将认证文件放在统一放置,而且只能root用户能够访问及修改,权限为400
      • 在/etc/pam.d/sshd 中,认证信息后面添加

        auth required pam_google_authenticator.so user=root secret=/data/google_authenticator/${USER}

        #指定用户去读取认证文件及认证文件的路径vim

相关文章
相关标签/搜索