如何通过终端完全使用Python创建GitHub access token
可行性结论
这个需求完全具备可落地性,唯一需要避开的坑是:GitHub早在2020年就逐步下线了账号密码直接调用API的鉴权方式,现在没法靠直接传用户名+明文密码生成token,走官方的设备授权流就能全程在终端闭环完成,不需要跳转第三方站点,也不需要手动打开网页做大量配置。
具体实现方案
所有操作都可以写成交互式Shell脚本或者终端工具,不需要GUI参与就能跑完全流程。
模块1:终端自动生成GitHub Access Token
- 不要做明文传输账号密码的逻辑,直接走GitHub官方设备OAuth流,纯无GUI的服务器环境也能正常运行:
- 第一步先在终端请求GitHub设备码接口,拿到8位用户授权码、设备校验ID,直接把授权码打印在终端提示用户,用户哪怕是在纯SSH登录的无界面服务器上,只要能访问GitHub,用任意设备输入一次授权码完成确认即可,授权完成后终端会自动拉取到有效token。
- 拿到token后自动配置最小必要权限:普通Git仓库操作开
repo、workflow权限即可,需要操作Gist再追加gist权限,不要开通多余的权限scope。 - 最后把token自动写入本地Git凭据存储,优先对接系统原生的密钥管理工具(macOS钥匙串、Windows凭据管理器、Linux libsecret),不要明文存在.gitconfig文件里,配置完成后HTTPS协议的Git操作就可以直接运行,不需要重复输入密码。
- 这个流程天然兼容开启了2FA两步验证的账号,比传统账号密码鉴权的兼容性更好。
模块2:终端全自动创建配置SSH Key
这部分完全不依赖GitHub网页操作,全靠本地命令+之前拿到的access token就能搞定:
- 第一步先做本地检查:执行
ls ~/.ssh/id_ed25519.pub判断有没有已存在的ed25519类型密钥,提示用户选择复用原有密钥还是生成新的,避免误覆盖用户原有SSH配置。 - 非交互式生成新密钥:执行
ssh-keygen -t ed25519 -C "用户绑定GitHub的邮箱" -f ~/.ssh/id_ed25519 -N "",如果用户需要给私钥加访问密码,把-N后面的空字符串替换成用户输入的密码即可,全程不会弹交互提示打断流程。 - 自动上传公钥到GitHub:读取刚生成的公钥文件
~/.ssh/id_ed25519.pub的内容,用之前拿到的access token调用GitHub公钥上传接口,把公钥绑定到用户账号下,公钥备注默认取当前设备的主机名,方便用户后续在GitHub后台区分不同设备的密钥。 - 连通性校验:自动给
~/.ssh/config写入GitHub域名对应的私钥配置,然后执行ssh -T git@github.com做连通性测试,返回认证成功的提示就代表SSH配置全部完成,后续走SSH协议的Git拉取、推送操作都可以直接运行。
避坑提示:不要在脚本里明文落盘存储用户输入的敏感信息、生成的access token、SSH私钥,所有敏感凭据优先交给系统原生密钥链管理,避免信息泄露。
内容的提问来源于stack exchange,提问作者HarelDanieli
相关产品推荐
相关产品推荐

