GitHub Action执行npm ci时报git@github.com公钥权限错误如何解决
GitHub Action 运行
npm ci 报 publickey 权限错误的排查与解决方法 这个报错的核心原因是:你的项目npm依赖中存在通过SSH协议引用的GitHub私有仓库包,GitHub Action的默认运行环境没有配置对应私有仓库的访问SSH密钥,导致拉取依赖时权限校验失败,返回128错误码。
排查步骤
- 检查项目根目录下的
package.json、package-lock.json(或npm-shrinkwrap.json)文件,确认是否有依赖项的仓库地址为ssh://git@github.com/[用户名]/[仓库名].git格式的私有仓库地址 - 确认你对该私有仓库有管理权限,可配置访问凭证
解决方案
方案1:改为HTTPS协议拉取依赖(无需配置密钥,操作最简单)
将私有依赖的仓库地址从SSH格式修改为HTTPS格式,示例如下:
原SSH格式:git@github.com:myorg/my-private-pkg.git#v1.2.0
修改后HTTPS格式:https://github.com/myorg/my-private-pkg.git#v1.2.0
如果是同账号/同组织下的私有仓库,只需要在Action配置的顶部添加内置Token的读取权限即可:
permissions: contents: read
如果是跨账号/跨组织的私有仓库,生成一个有对应仓库读取权限的个人访问令牌(PAT),将PAT存储到仓库Secrets中,不要明文写在配置里即可。
方案2:配置SSH密钥到Action运行环境
如果必须使用SSH协议拉取依赖,按以下步骤操作:
- 生成一对新的SSH密钥,将公钥添加到对应私有仓库的「Deploy keys」配置中,仅勾选只读权限即可
- 将私钥内容存储到当前运行Action的仓库的「Secrets」配置中,自定义命名为
PRIVATE_SSH_KEY - 在Action配置中,执行
npm ci之前添加SSH密钥加载步骤,示例配置:
- name: 加载私有仓库访问SSH密钥 uses: webfactory/ssh-agent@v0.8.0 with: ssh-private-key: ${{ secrets.PRIVATE_SSH_KEY }}
方案3:全局替换Git协议规则(无需修改依赖配置)
如果不想改动项目中的依赖地址,可以在Action中添加Git全局配置,自动将所有GitHub的SSH请求替换为HTTPS请求,示例配置:
- name: 全局替换GitHub SSH请求为HTTPS run: git config --global url."https://github.com/".insteadOf git@github.com:
如果需要用PAT访问私有仓库,修改命令为:
- name: 全局替换GitHub SSH请求为带凭证的HTTPS run: git config --global url."https://${{ secrets.MY_PAT }}@github.com/".insteadOf git@github.com:
内容的提问来源于stack exchange,提问作者sakshya73
相关产品推荐
相关产品推荐

