Google Colab如何无用户交互完成Google服务身份认证
Colab无交互认证实现方案
要适配colabctl自动化运行,直接替换掉原来依赖auth.authenticate_user()和交互式挂载的逻辑,用服务账号做认证即可全程无弹窗,不需要任何手动确认操作。
前置准备
- 到Google Cloud控制台创建服务账号,给对应项目开通Google Drive API、Google Sheets API权限
- 给服务账号分配必要的角色权限,如果要访问个人账号下的Drive文件、Sheets表格,提前把对应文件/文件夹共享给服务账号的邮箱地址
- 下载服务账号的JSON格式密钥文件,通过colabctl提前上传到Colab运行环境的固定路径,或者存到可稳定访问的存储位置
可直接替换的代码
# 配置项:替换成你自己的服务账号密钥存放路径 SERVICE_ACCOUNT_KEY = "/content/your-service-account-key.json" # -------------------------- # Google Drive 无交互访问 # -------------------------- from google.oauth2 import service_account from googleapiclient.discovery import build # 权限范围根据需求调整,只读场景可以把/drive改成/drive.readonly DRIVE_SCOPES = ["https://www.googleapis.com/auth/drive"] drive_creds = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_KEY, scopes=DRIVE_SCOPES ) # 后续Drive文件读写都通过drive_service调用即可 drive_service = build("drive", "v3", credentials=drive_creds) # 如果你必须用drive.mount的本地挂载路径形式,也可以用预存凭据的方式跳过弹窗: # 提前在本地交互式Colab环境跑一次drive.mount完成授权,把/root/.config/drive目录下的凭据文件存下来 # 自动化运行时先把存好的凭据文件拷贝到对应路径,再调用挂载即可,不会弹出确认窗口 # import os # from google.colab import drive # !mkdir -p /root/.config/drive # !cp /path/to/your/saved/drive_creds.json /root/.config/drive/credentials.json # drive.mount('/content/drive', force_remount=True) # -------------------------- # Google Sheets 无交互访问 # -------------------------- import gspread from gspread_dataframe import get_as_dataframe, set_with_dataframe SHEETS_SCOPES = [ "https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive" ] sheets_creds = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_KEY, scopes=SHEETS_SCOPES ) gc = gspread.authorize(sheets_creds) # 后续gspread、gspread_dataframe的用法和原有代码完全一致,不需要修改业务逻辑
踩坑提示
- 服务账号是独立的虚拟账号,和个人Google账号不互通,凡是要访问的个人Drive文件、Sheets表格,必须手动给服务账号邮箱开对应权限,否则一定会报403权限错误
- 服务账号密钥不要明文写在公开脚本里,避免泄露后被他人盗用云资源权限
- 预存用户凭据的方式虽然不需要额外创建服务账号,但凭据有有效期,过期后需要重新手动生成,长期自动化运行优先选服务账号方案,稳定性更高。
内容的提问来源于stack exchange,提问作者user3347814
相关产品推荐
相关产品推荐

