AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1460640
Accepted
s.k
s.k
Asked: 2023-03-24 04:24:01 +0800 CST2023-03-24 04:24:01 +0800 CST 2023-03-24 04:24:01 +0800 CST

直接从计算机(无移动设备)为 2FA 生成 TOTP

  • 772

在 Ubuntu 22.04.2 上,我很高兴听到有关生成TOTP代码以用于任何需要 2FA 的给定应用程序的本机和安全方法。

您知道直接在 Ubuntu 计算机上执行此操作的开源方法吗?

我能找到的所有教程都是基于“移动应用程序”方式(例如使用 Google Authenticator),我不能使用它,因为除了笔记本电脑我没有任何其他移动设备。

22.04
  • 4 4 个回答
  • 787 Views

4 个回答

  • Voted
  1. Best Answer
    user68186
    2023-03-24T04:52:38+08:002023-03-24T04:52:38+08:00

    Keepass XC

    这是 Ubuntu 存储库中提供的 Linux 本机开源密码管理器。如果你想要最新的,还有一个 PPA。

    从 Ubuntu 商店或终端安装 keepassXC。打开终端并输入:

    sudo apt install keepassxc
    
    1. 安装后,您必须创建一个数据库来保存密码。
    2. 然后您必须使用用户名和密码创建一个新条目。它不允许在这一步创建 TOPT。
    3. 最后,一旦您选择了新创建的条目(用户名和密码),您就可以使用顶部的菜单并选择条目> TOTP... > 设置 TOTP。

    安全

    KeepassXC 数据库默认受密码保护。也就是说,要使用存储在数据库中的密码(和 TOTP),您必须打开 KeepassXC 应用程序并输入密码才能打开数据库。除了密码之外,您还可以选择使用一个文件(存储在 USB 驱动器中)来提高安全性。也就是说,如果特定文件不在 USB 驱动器中或特定 USB 驱动器未插入,则没有人可以打开 KeepassXC 数据库并访问 TOTP 或密码。

    警告

    您可能需要在提供此类 2FA 的网页上重新开始设置 TOTP。例如,您可能需要暂时禁用 Google 帐户中的 2FA,然后重新设置以获取新的二维码。设置 2FA 后,大多数网页不会显示密钥或相应的二维码。如果您当前在手机上使用身份验证应用程序,则当您再次在网页中进行 2FA 设置时,该应用程序生成的 TOTP 号码将会过时。

    从好的方面来说, KeeppassXC 可以在设置后为每个 TOTP 生成二维码。也就是说,您可以使用手机的身份验证应用程序扫描 KeepassXC 生成的二维码进行更新。

    浏览器扩展

    您可能希望为 KeepassXC 使用 Chrome 或 Firefox 扩展。这使您可以通过单击几下来复制和粘贴用户 ID、密码和 TOTP(如果可用)。

    授权

    Authy 是另一个适用于手机、平板电脑和台式机的身份验证应用程序。甚至还有它的Snap 版本。

    与 KeeppassXC 不同,Authy 不管理密码。它仅用于生成 TOTP。从好的方面来说,如果您在手机或平板电脑上使用 Authy,您可以使 TOTP 在包括台式机在内的所有设备之间保持同步。您必须创建一个 Authy 帐户才能使每台设备中的 Authy 应用保持同步。

    希望这可以帮助

    • 5
  2. Vertganti
    2023-03-24T18:02:04+08:002023-03-24T18:02:04+08:00

    如果您只需要生成代码而不需要管理它们(例如,您不介意将 TOTP 秘密存储在别处并在每次需要生成代码时提供它),您可以使用oathtoolwhich is the part of the oath-toolkit package。要从 base32 编码的秘密生成 6 位代码,您可以使用以下命令:

    oathtool --base32 --totp "SECRET" -d 6
    

    默认时间步长为 30 秒,默认开始时间为 1970-01-01 00:00:00 UTC。有关更多使用信息,请参阅联机帮助页。有关来源,请参阅debain 存储库和Jammy 来源。

    如果您不想使用外部包或工具,生成 TOTP 所需的算法在相关的 RFC 中有描述,您可以使用它来编写自己的 shell 脚本:

    • RFC 2104:HMAC:用于消息身份验证的密钥散列
    • RFC 4226:HOTP:一种基于 HMAC 的一次性密码算法
    • RFC 6238:TOTP:基于时间的一次性密码算法
    • 3
  3. preferred_anon
    2023-03-24T20:25:38+08:002023-03-24T20:25:38+08:00

    这和我前段时间在security SE上问的一个问题有关。

    首先,有一个有用的命令行工具,叫做oathtool. 您可以使用它使用您的 2fa 密码为 2fa 生成 6 位代码。此处概述了这些步骤。

    显然,您的 2fa 秘密比 2fa 代码本身更重要。您可以将 2fa 密钥存储在密码管理器中,并编写脚本以从中生成 6 位代码。

    如果您将密钥存储在您的机器上,那么您并不是真正的 2fa。你只有两个密码。为了解决这个问题,我做了以下事情:

    • 将 2fa 密钥存储在加密文件中,并将该文件存储在闪存驱动器上。
    • 当我插入我的闪存驱动器时,将包含(可能很多)2fa 密钥的文件夹安装到我的密码管理器可以看到的文件夹中。我使用pass,所以这很容易做到。目前我手动执行此操作,但它可以自动执行。
    • 该界面是您可以自定义的,但我编写了以下 bash 脚本,名为2fa:
    pass 2fa/$1 | xargs -d '\n' oathtool -b --totp
    

    这(使用我的命名系统)的最终结果是我可以2fa gitlab在我的终端上编写和获取 6 位代码。我有另一个脚本将它写入我的剪贴板,并提示我一个名称列表(与我的密码管理器相同的界面)。

    当然,如果没有 USB 驱动器,这一切都无法正常工作,这使其成为真正的“您拥有的东西”解决方案。但是,它只有在您可以解密 gpg 文件时才有效,这需要我的私钥。目前我只在几台受信任的机器上使用 2fa,所以这对我来说没问题。如果我需要它更通用,那么我可能会重新考虑使用电话或 Yubikey。

    与原始帖子中的 Yubikey 相比,此方案受到批评。我建议检查一下。

    • 1
  4. Chris H
    2023-03-24T20:09:54+08:002023-03-24T20:09:54+08:00

    我为此使用了 Firefox 扩展Authenticator ,以及工作的 SSO - 他们实际上推荐它给那些不能或不会*使用移动设备的人。这是在几台台式机(工作和家庭)上设置的;在笔记本电脑上,我想要良好的设备安全性,因为获取代码有点太容易了。


    * Android 的 Microsoft Authenticator 权限要求等排除了我在个人手机上使用它的可能性,但我已经找到了一个轻量级且合理的替代方案。

    • 0

相关问题

  • Ubuntu 22.04 Beta 中的慢速互联网连接 [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve