SSH 开启两步验证

这里使用 Google Authenticator PAM module 来为 SSH 添加两步验证,操作系统为 Ubuntu 18.04 LTS 。

安装 Google PAM

Ubuntu 的仓库自带了包,直接安装即可。

apt update && apt install libpam-google-authenticator -y

配置 Google PAM

直接执行 google-authenticator 命令,进入两步验证配置。

  • 是否希望身份验证令牌基于时间

    Do you want authentication tokens to be time-based (y/n) y
  • 输出二维码与 Secret Key 与应急密钥

    Your new secret key is: ABCDEFG
    Your verification code is 123456
    Your emergency scratch codes are:
    ABCD12345
    ABCD12345
    ABCD12345
    ABCD12345
    ABCD12345
  • 是否更新验证文件

    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分钟

    By default, tokens are good for 30 seconds. 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 +-1min (window size of 3) to about +-4min (window size of
    17 acceptable tokens).
    Do you want to do so? (y/n) y
  • 限制尝试次数,每30秒最大可尝试3次

    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

在步骤 2 时终端会输出二维码与 Secret Key 与应急密钥。

  • 二维码可以直接使用 Google Authenticator 手机 App 或 Chrome Plugin 扫描,如果终端中二维码显示的不够清晰,可以直接复制二维码下方给出的 Google 链接在游览器中打开,会显示一个清晰的二维码。
  • Secret Key 可以直接输入到 Google Authenticator 手机 App 或 Chrome Plugin 插件里,但是 1Password 不可以,使用 1Password 建议直接扫描二维码。
  • 应急密钥是在无法使用两步验证 App 的时候应急使用,每组密钥只能使用一次,请做好保存备份以备不时之需。

配置 OpenSSH

编辑 SSH 的 PAM 配置。

vim /etc/pam.d/sshd

找到 # Standard Un*x authentication. 注释下方的 @include common-auth

# Standard Un*x authentication.
#@include common-auth

找到 # Standard Un*x password updating. 在最下方添加 auth required pam_google_authenticator.so

# Standard Un*x password updating.
@include common-password
auth required pam_google_authenticator.so

编辑 SSH 配置。

vim /etc/ssh/sshd_config

找到 ChallengeResponseAuthentication 修改为 Yes

# some PAM modules and threads)
ChallengeResponseAuthentication yes

找到 UsePAM 修改为 Yes 并在下方新增一行 AuthenticationMethods publickey,password publickey,keyboard-interactive

UsePAM yes
AuthenticationMethods publickey,password publickey,keyboard-interactive

重启 SSH

systemctl restart sshd.service

重启 SSH 之后注意请不要断开当前 SSH 链接,以免配置错误无法登陆,只能重装主机。新建一个终端窗口,登陆 SSH 进行测试,如果配置正确,在自动验证完 SSH 证书后会提示输出两步验证码登陆。


文章作者: REPL\ acgio
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 REPL\ acgio !
 本篇
SSH 开启两步验证 SSH 开启两步验证
这里使用 Google Authenticator PAM module 来为 SSH 添加两步验证,操作系统为 Ubuntu 18.04 LTS 。 https://github.com/google/google-authentic
2019-12-10
下一篇 
打造一台全能下载服务器 打造一台全能下载服务器
这篇文章,我们期望打造一台泛用的全能下载服务器。使用多种软件:qBittorrent、Aria2、MLDonkey 来支持几乎全部的下载协议,然后经过配置,整理它们的默认下载路径,以方便管理。由于无版权服务器基本都处于 某国 直连访问恶劣
2019-11-24
  目录