最近在用 GitHub 的时候,相信很多人都遇到了同一个提示:必须开启二阶段验证(2FA),否则很多操作都会被限制。

一开始我是有点抗拒的——
要下载额外的 App(比如 Google Authenticator 或 Microsoft Authenticator),切换设备还麻烦,对我这种“开发优先”的人来说,体验并不优雅。

于是我干脆做了一件更“工程师”的事:
👉 自己用 Python 写了一个 TOTP 动态口令生成器。


一、为什么会有这个工具?

GitHub 强制开启 2FA,本质上是为了提升账号安全性。
常见的 2FA 原理是基于 TOTP(Time-based One-Time Password),也就是:

  • 每 30 秒生成一个一次性验证码

  • 基于“密钥 + 当前时间”计算得出

  • 不依赖网络,本地即可生成

换句话说,只要你有这个“密钥(Secret Key)”,
👉 你完全可以自己生成验证码,而不一定要依赖手机 App。


二、实现思路(非常简单)

我用到了一个 Python 库:pyotp

核心逻辑就三步:

  1. 输入你在 GitHub 绑定时提供的 Secret Key

  2. pyotp.TOTP() 创建对象

  3. 每秒刷新一次当前验证码


三、效果是这样的

运行脚本后,你会看到类似:

当前口令: 123456  |  剩余 18 秒
  • 每 30 秒自动刷新

  • 实时显示剩余时间

  • 完全本地运行,无需联网


四、如何使用?

1️⃣ 安装依赖

pip install pyotp

2️⃣ 运行脚本

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import pyotp
import time
from datetime import datetime


def generate_totp_token():
    """
    一个交互式的 TOTP (2FA) 动态口令生成器。
    """
    # 1. 从用户那里获取密钥
    # 在设置 2FA 时,从网站的 "手动设置" 选项中复制这个密钥
    secret_key = input("请输入您的 2FA 密钥 (Secret Key): ").strip().upper()

    # 验证密钥是否看起来合法(基本的长度检查)
    if len(secret_key) < 16:
        print("\n[!] 错误:密钥看起来太短了。请确保您复制了完整的密钥。")
        return

    try:
        # 2. 基于密钥创建一个 TOTP 对象
        totp = pyotp.TOTP(secret_key)
    except Exception as e:
        print(f"\n[!] 错误:输入的密钥无效。它可能不是一个合法的 Base32 字符串。({e})")
        return

    print("\n" + "=" * 40)
    print("      动态口令生成器已启动 (按 Ctrl+C 退出)")
    print(f"      密钥: ...{secret_key[-4:]}")  # 只显示密钥的最后几位以保护隐私
    print("=" * 40)

    try:
        while True:
            # 3. 生成当前的动态口令
            current_token = totp.now()

            # 4. 计算当前口令的剩余有效时间
            # TOTP 的标准时间间隔是 30 秒
            time_remaining = totp.interval - (datetime.now().timestamp() % totp.interval)

            # 5. 在同一行动态显示口令 和 剩余时间
            # `\r` 让光标回到行首,`end=''` 防止打印换行符
            print(f"\r当前口令: {current_token}  |  剩余 {int(time_remaining):02d} 秒  ", end="")

            # 每秒刷新一次
            time.sleep(1)

    except KeyboardInterrupt:
        print("\n\n程序已退出。")
    except Exception as e:
        print(f"\n发生未知错误: {e}")


# --- 程序入口 ---
if __name__ == "__main__":
    generate_totp_token()

3️⃣ 输入你的 Secret Key

这个 Key 在 GitHub 开启 2FA 时可以看到:

路径大致是:

  • Settings → Security → Two-factor authentication

  • 选择 “手动输入密钥”


4️⃣ 开始使用

脚本会持续输出动态验证码,你可以直接用于登录验证。


五、适合哪些人?

这个小工具特别适合:

  • 不想装额外 App 的开发者

  • 经常在服务器 / 远程环境操作的人

  • 想自己掌控 2FA 逻辑的人

  • 做自动化 / DevOps 的同学


六、一些安全提醒(很重要)

虽然这个方案很爽,但要注意:

⚠️ Secret Key = 你的账号钥匙

  • 不要提交到代码仓库

  • 不要上传到服务器明文存储

  • 建议只在本地临时使用

⚠️ 如果设备丢失,没有备份 Key:

  • 你可能会永久失去账号访问权限


七、总结

一句话总结:

👉 2FA 不是必须用 App,本质是算法,你完全可以自己实现。

这次“被迫开启安全机制”,反而让我更深入理解了 TOTP 的原理,也顺手做了一个非常实用的小工具。

如果你也是开发者,强烈建议试试这种方式,
既提升安全性,又保持工程上的自由度 😄


如果你想要进阶版本(比如:

  • 多账号管理

  • Web UI 界面

  • 自动填充验证码

我也可以帮你一起升级这个工具 👍

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐