Travis-CI从部署密钥切换到用户密钥后克隆失败,是否需删除部署密钥?
解决Travis CI用户密钥访问跨私有仓库的问题
一、是否需要删除部署密钥?
答案是需要,但可以先做安全验证再操作:
Travis CI在处理SSH仓库访问时,仓库级的部署密钥优先级高于账户级的用户密钥。也就是说,只要当前仓库还配置了部署密钥,Travis会优先用它来尝试克隆其他私有仓库——但部署密钥仅对当前仓库有访问权限,自然会抛出ERROR: Repository not found的错误。
为了尽可能降低对正在运行的构建的影响,你可以先暂时禁用部署密钥(在GitHub仓库的「Settings > Deploy keys」里取消勾选权限,或者暂时删除后可恢复测试),然后触发一次测试构建,确认克隆另一个私有仓库的命令能正常执行。验证没问题后,再彻底删除部署密钥即可。
二、如何确认用户密钥已关联到目标仓库?
有两种简单的方式可以验证:
- 通过Travis CLI验证
登录Travis CLI后,执行以下命令:
travis ssh-key --list -r organisation/your-target-repo
这个命令会列出该仓库关联的所有SSH密钥,你上传的用户密钥会显示对应的注释(通常是你上传时的标识)或者关联的GitHub用户名,以此确认它已被正确添加。
- 通过Travis Web界面验证
进入Travis CI对应仓库的设置页面,找到「SSH Keys」选项卡:
- 这里会列出所有已配置的密钥,用户密钥一般会标注为「User Key」,并显示关联的GitHub账号名称;而部署密钥会标注为「Deploy Key」,仅关联当前仓库。
额外调试小技巧
如果还是有问题,可以在.travis.yml里添加一步调试命令,确认当前使用的SSH身份:
before_script: - ssh -T git@github.com
运行构建后,这一步会返回当前认证的GitHub用户名,比如Hi username! You've successfully authenticated, but GitHub does not provide shell access.,以此确认是否用了拥有跨仓库权限的用户密钥。
内容的提问来源于stack exchange,提问作者k_rus




