当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何在 Linux 上为 SSH 启用双因素身份验证 (2FA)

作者:精品下载站 日期:2024-12-14 23:28:53 浏览:15 分类:玩电脑

如何在 Linux 上为 SSH 启用双因素身份验证 (2FA)


在本文中,我们将向您展示如何使用 Google PAM(可插入身份验证模块)和 Microsoft Authenticator 移动应用在 Linux 上启用双因素身份验证 (2FA) 进行 SSH 登录。当您通过 SSH 在 Linux 主机上进行身份验证时,2FA 允许您添加额外的安全层。启用 2FA 后,除了用户名和密码(或 RSA 密钥)之外,您还必须从智能手机输入一次性数字密码 (TOTP),才能通过 SSH 登录 Linux。

在您的智能手机上安装 Microsoft Authenticator 移动应用(Google Store 和 App Store 中均提供)。

在本指南中,我选择了 Microsoft Authenticator,因为我已在 Azure 中使用它进行 MFA 身份验证。如果需要,您可以使用 Google 身份验证器。

现在您需要在 Linux 主机上安装并配置 Google PAM:

  1. 通过 SSH 连接到您的 Linux 主机;

  2. 使用包管理器安装 Google PAM 身份验证器:
    Debian/Ubuntu:

    sudo apt-get install libpam-google-authenticator 

    RHEL/CentOS/Fedora:

    yum install google-authenticator

    [玩转系统] 如何在 Linux 上为 SSH 启用双因素身份验证 (2FA)

  3. 运行命令:

    google-authenticator
  4. 该工具将生成并在控制台中显示二维码:

    [玩转系统] 如何在 Linux 上为 SSH 启用双因素身份验证 (2FA)

  5. 在智能手机上运行 Microsoft Authenticator 应用。选择添加账户->个人账户->扫描二维码;

  6. 使用应用程序扫描二维码。您的用户名和服务器的新条目将出现在身份验证器应用程序中。您将使用此项来获取连接到您的主机的一次性密码;

    [玩转系统] 如何在 Linux 上为 SSH 启用双因素身份验证 (2FA)

  7. 请注意,您的 Linux 控制台中会显示密钥和紧急代码;

    如果您丢失/损坏了智能手机,您将需要这些代码才能连接到主机。把它们放在安全的地方!

  8. 然后 google-authenticator 显示一些其他问题:

  9. 您希望身份验证令牌基于时间吗?

    Y -> Enter
  10. 您想让我更新您的“/home/sysops/.google_authenticator”文件吗?

    Y -> Enter
  11. 您想禁止多次使用同一身份验证令牌吗?

    Y -> Enter
  12. 默认情况下,令牌的有效期为 30 秒……

    Y -> Enter

    默认情况下,一次性令牌每 30 秒更改一次。对于大多数情况来说,这是最佳选择。但是,Linux 主机和智能手机的时间同步非常重要。

  13. 您想启用速率限制吗?

    Y -> Enter

    [玩转系统] 如何在 Linux 上为 SSH 启用双因素身份验证 (2FA)

    您可以一次性配置所有设置:

    $ google-authenticator -t -f -d -w 3 -e 5 -r 3 -R 30

    -t - 启用使用一次性代码登录
    -f - 将配置保存到 ~/.google_authenticator
    -d - 拒绝使用以前的代码
    -w 3 - 允许使用一个前一个和一个后一个令牌(如果时间不同步)
    -e 5 - 生成 5 个紧急代码
    - r 3 -R 30 - 允许每 30 秒使用不超过 3 次登录

  14. 然后将以下指令添加到/etc/pam.d/sshd:

    auth required pam_google_authenticator.so nullok

    [玩转系统] 如何在 Linux 上为 SSH 启用双因素身份验证 (2FA)

    nullok 选项允许未设置双因素身份验证的用户使用用户名和密码登录。 2FA 配置和测试后,建议禁用要求使用双因素身份验证的选项。

  15. 然后编辑/etc/ssh/sshd_config:

    sudo mcedit /etc/ssh/sshd_config
  16. 改变

    ChallengeResponseAuthentication

    价值

    Yes
    ChallengeResponseAuthentication yes
  17. 保存 sshd_config 中的更改并重新启动 sshd:

    service ssh restart

    [玩转系统] 如何在 Linux 上为 SSH 启用双因素身份验证 (2FA)

然后尝试通过 SSH 连接到您的 Linux 主机。在输入密码之前,系统会要求您输入验证码。

打开智能手机上的 Authenticator 应用程序并找到 Linux 主机的用户。在控制台中输入身份验证器为您生成的 6 个字符的一次性密码。

[玩转系统] 如何在 Linux 上为 SSH 启用双因素身份验证 (2FA)

请注意,一次性密码的有效期是有限的(默认为 30 秒)。如果您输入了正确的代码,系统将提示您输入 Linux 用户密码。

[玩转系统] 如何在 Linux 上为 SSH 启用双因素身份验证 (2FA)

如果登录成功,身份验证日志中会出现以下行:

cat /var/log/auth.log
Jul 20 11:12:22 srvubun01 sshd(pam_google_authenticator)[6242]: Accepted google_authenticator for sysops

如果输入了错误的代码,日志将显示错误:

Jul 20 11:14:20 srvubun01 sshd(pam_google_authenticator)[6436]: Invalid verification code for sysops
Jul 20 11:14:22 srvubun01 sshd[6436]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.10.15 user=sysops

如果要将 2FA 与 SSH 密钥身份验证一起使用,请将以下指令添加到 /etc/ssh/sshd_config:

PasswordAuthentication no
PubkeyAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯