被 GitHub 强制开启 2FA 后,我用 Python 手搓了一个动态验证码工具(附源码)
最近在用 GitHub 的时候,相信很多人都遇到了同一个提示:必须开启二阶段验证(2FA),否则很多操作都会被限制。
一开始我是有点抗拒的——
要下载额外的 App(比如 Google Authenticator 或 Microsoft Authenticator),切换设备还麻烦,对我这种“开发优先”的人来说,体验并不优雅。
于是我干脆做了一件更“工程师”的事:
👉 自己用 Python 写了一个 TOTP 动态口令生成器。
一、为什么会有这个工具?
GitHub 强制开启 2FA,本质上是为了提升账号安全性。
常见的 2FA 原理是基于 TOTP(Time-based One-Time Password),也就是:
-
每 30 秒生成一个一次性验证码
-
基于“密钥 + 当前时间”计算得出
-
不依赖网络,本地即可生成
换句话说,只要你有这个“密钥(Secret Key)”,
👉 你完全可以自己生成验证码,而不一定要依赖手机 App。
二、实现思路(非常简单)
我用到了一个 Python 库:pyotp
核心逻辑就三步:
-
输入你在 GitHub 绑定时提供的 Secret Key
-
用
pyotp.TOTP()创建对象 -
每秒刷新一次当前验证码
三、效果是这样的
运行脚本后,你会看到类似:
当前口令: 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 界面
-
自动填充验证码
我也可以帮你一起升级这个工具 👍
更多推荐



所有评论(0)