跳转到主要内容

TOTP (认证器) 应用程序,使用Python & Textual

项目描述

textual-totp: 使用Python & Textual的TOTP (认证器) 应用程序

ttotp in action

安装

您可以使用pip或pipx安装textual-totp

pipx install textual-totp

配置

配置以TOML文件的形式位于用户的常规配置目录中。在Linux上,这是 ~/.config/ttotp/settings.toml

启动时,ttotp 调用一个程序,该程序按行打印TOTP URI。作者建议将您的TOTP存储在 pass,标准Unix密码管理器 中。在这种情况下,您可以使用类似以下命令进行配置

otp-command = ['pass', 'show', 'totp-tokens']

如果您讨厌安全,可以使用不安全的命令如 cat,或者只用 echo 测试

otp-command = "echo 'otpauth://totp/example?algorithm=SHA1&digits=6&secret=IHACDTJ2TFCSLUJLMSHYDBD74FS7OY5B'"

如果命令是字符串,则使用shell解释;否则,直接使用参数列表。

空闲时自动退出

要指定空闲期后自动退出,请使用 auto-exit 设置

# Exit after 5 minutes (300 seconds) of inactivity
auto-exit = 300

任何键盘事件、鼠标点击或鼠标滚动都算作“活动”,并将重置自动退出计时器。

如果没有指定 auto-exit,或者它是0,则没有空闲超时。

配置文件

textual-totp支持多个配置文件。配置文件组织为配置文件的节;如果在配置文件节内未指定设置,则使用全局设置。

例如,给定

auto-exit=300
otp-command = ["..."]
[trusted-location]
auto-exit=0

textual-totp 通常在5分钟无活动后退出,但当您运行 ttotp --profile trusted-location 时,将禁用自动退出。

获取TOTP URI

有几种方法可以获取您的TOTP URI,它们是以 otpauth://totp/ 开头的字符串。

  • 在注册2FA时扫描单个二维码
    • 您可以使用兼容的工具(如 PyQRCode)拍照或屏幕截图,然后在本地上解码二维码
  • 从Google Authenticator的“转移账户”功能扫描二维码。这些是“离线 otpauth-migration”URL的形式。使用兼容的工具解码,如 otpauth-migration-decode
    • Android不允许截图,但您的笔记本电脑可能有一个摄像头
  • 将某些2FA注册过程中显示的较长的字母数字代码转录成完整的otpauth URL,删除任何存在的空白。

有一些基于浏览器的工具可以帮助完成这些任务。然而,很难确定网页是否安全地处理数据。因此,本节不推荐任何工具。

使用textual-totp

启动textual-totp的命令是 ttotp。它有几个选项,可以通过 ttotp --help 显示。

ttotp 首先调用 otp-command 来获取TOTP列表。这可能需要交互(例如,pass 命令可能需要请求您的GPG密钥密码)

一旦otp-command完成,ttotp 将显示每个可用的TOTP。每个代码将显示为 ******,直到它被揭示。

以多种方式上下导航

  • 上下键
  • tab和shift-tab键
  • "j" 和 "k"(vi键)

要揭示一个代码,移动到所需的行并按 "s"。当代码到期时,它将被再次替换为 ******

按 "c" 直接将代码复制到操作系统的剪贴板。代码将在30秒后从剪贴板清除。您的操作系统可能会报告 ttotp "从剪贴板粘贴"。这是因为 ttotp 试图仅清除它设置的值,通过检查当前剪贴板值是否等于它之前粘贴的值。

按 "/" 并输入要搜索的子字符串以搜索密钥。按 Ctrl+A 再次显示所有密钥。

Textual的内置 模糊匹配 算法被使用。

这使得搜索变得容易,例如,“Jay Doe / example.com”,只需输入“ja d ex”,而无需任何复杂的模糊搜索技术。

由于这种实现的简单性,字符类内部的空间字符不按预期工作。由于复杂的正则表达式可能很少使用,这不太可能是一个巨大的限制。

使用Ctrl+C退出应用程序。

TOTP的内存存储

只要 ttotp 打开,TOTP密钥值就以纯文本形式存储在内存中。

ttotp 从不将密钥值写入操作系统文件或存储在环境变量中。(但您的otp-command可能这样做!仔细检查任何相关文档)

开发状态

我(@jepler)编写此软件是因为它对我有用。它以当前的形式满足了我的需求。我为了自己的需求而维护它,对问题和拉取请求的处理可能不会是优先事项。感谢您对此的理解!

我在Linux上开发此软件,通常是Debian Linux。我经常将兼容Debian Oldstable作为目标,但此软件包仅在稳定的Debian Bookworm上进行了测试,使用Python 3.11,几乎肯定使用了不在Python 3.9中的构造。欢迎对其他平台的兼容性进行改进。

在极不可能的情况下,如果这个项目变得流行,我希望将其转变为一个由多个维护者共同管理的社区项目。我在跟踪器中输入的一些问题似乎是软件开发的良好方向。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

textual_totp-0.9.1.tar.gz (48.9 kB 查看哈希值)

上传时间 源代码

构建分发

textual_totp-0.9.1-py3-none-any.whl (9.8 kB 查看哈希值)

上传时间 Python 3

由以下组织支持