如何在Ubuntu 22.04.3服务器上通过微软账号+2FA的SSO认证编写Bash脚本从TeamCity下载构建制品?
如何在Ubuntu 22.04.3服务器上通过微软账号+2FA的SSO认证编写Bash脚本从TeamCity下载构建制品?
你遇到的这个场景确实有点棘手——毕竟SSO+2FA的交互式验证和bash脚本的自动化需求天生不太兼容,但别担心,有个靠谱的解决方案:使用TeamCity个人访问令牌(PAT)绕开SSO认证,这也是官方推荐的自动化场景认证方式。
第一步:生成TeamCity个人访问令牌
因为你的TeamCity是SSO-only模式,所以得先通过网页端登录(用微软账号+2FA完成验证),然后生成专属的访问令牌:
- 登录TeamCity后,点击右上角的头像,选择「Profile」进入个人设置
- 切换到「Access Tokens」标签页,点击「Create token」
- 给令牌起个好记的名字(比如「Ubuntu脚本下载制品」),设置合适的有效期,最重要的是勾选必要的权限:至少要选「Builds」分类下的「View builds」和「Download artifacts」,遵循最小权限原则,别给多余权限
- 生成后务必复制保存好令牌,因为页面刷新后就看不到完整内容了
第二步:编写Bash下载脚本
有了PAT之后,就可以用curl调用TeamCity的API来下载制品了,下面是一个可直接修改使用的脚本示例:
#!/bin/bash # ===== 请根据你的实际情况修改以下参数 ===== # TeamCity服务器地址(比如https://teamcity.yourcompany.com) TEAMCITY_SERVER="https://your-teamcity-instance.com" # 构建类型ID:在TeamCity构建配置的页面URL里能找到,格式类似BT123 BUILD_TYPE_ID="BT123" # 构建版本:可以填具体的构建号,或者用"lastSuccessful"获取最后一次成功构建的制品 BUILD_NUMBER="lastSuccessful" # 要下载的制品路径:比如"dist/app.tar.gz",如果要下载整个目录,填"dist/"并在URL末尾加?archive=zip ARTIFACT_PATH="dist/app.tar.gz" # 你刚才生成的个人访问令牌 PAT="your-personal-access-token-here" # 本地保存路径 OUTPUT_FILE="./app.tar.gz" # ========================================= # 执行下载命令 curl -fL -u ":$PAT" "$TEAMCITY_SERVER/repository/download/$BUILD_TYPE_ID/$BUILD_NUMBER/$ARTIFACT_PATH" -o "$OUTPUT_FILE" # 检查下载结果 if [ $? -eq 0 ]; then echo "✅ 制品下载成功,已保存到 $OUTPUT_FILE" else echo "❌ 制品下载失败,请检查参数或网络连接" exit 1 fi
一些实用提示
- 如果要下载整个目录的制品,把
ARTIFACT_PATH设为目录名(比如dist/),然后把URL改成"$TEAMCITY_SERVER/repository/download/$BUILD_TYPE_ID/$BUILD_NUMBER/$ARTIFACT_PATH?archive=zip",这样会把目录打包成zip下载 - 测试脚本时可以给curl加
-v参数,查看详细请求日志,方便排查认证或路径问题 - 如果你的TeamCity用的是自签名SSL证书,curl可能会报错,这时候可以临时加
--insecure参数,但更安全的做法是把证书导入Ubuntu的系统信任存储 - 记得定期更换PAT,尤其是当令牌过期或者权限需要调整的时候
为什么不直接用SSO+2FA?
bash脚本很难处理2FA的交互式验证(比如输入手机验证码),而且SSO会话依赖浏览器的cookie,cookie不仅会过期,还容易泄露,安全性远不如PAT,所以官方也更推荐用PAT来做自动化场景的认证。
备注:内容来源于stack exchange,提问作者Ubuntu Learner
相关产品推荐
相关产品推荐

