Heroku构建报错Host key verification failed无法读取远程仓库求解
根因说明
该报错为Heroku构建阶段执行npm install时,尝试通过SSH协议拉取Github私有仓库依赖时身份校验失败导致,常见触发场景:
- 本次提交的package.json中新增/修改了私有Github仓库的依赖,使用了SSH格式的依赖地址
- 此前配置的、允许Heroku访问私有仓库的SSH部署密钥被删除/过期
- Github官方SSH主机密钥更新,Heroku侧缓存的旧主机密钥校验不通过
解决步骤
- 优先推荐使用HTTPS+PAT方式拉取私有依赖,无需配置SSH密钥,适配无Heroku CLI的操作场景:
- 前往Github个人账户设置的「Developer settings」-「Personal access tokens」页面,生成一个仅授予私有仓库读取权限的PAT(个人访问令牌)
- 将package.json中所有SSH格式的私有依赖地址,替换为PAT授权的HTTPS格式,示例:
原SSH格式:"your-private-pkg": "git+ssh://git@github.com/your-org/your-private-pkg.git#main"
替换后HTTPS格式:"your-private-pkg": "git+https://<你的PAT>@github.com/your-org/your-private-pkg.git#main" - 提交修改后的package.json触发Heroku构建即可。
- 若需保留SSH方式拉取依赖,按以下步骤操作:
- 本地生成一对专属的SSH密钥对,不要使用个人日常使用的本地密钥
- 将公钥添加到对应私有Github仓库的「Deploy keys」(部署密钥)列表,仅勾选只读权限即可
- 打开Heroku项目后台的「Settings」-「Config Vars」板块,新增名为
GITHUB_DEPLOY_KEY的环境变量,值为生成的私钥内容 - 在项目根目录新增
.profile文件,写入以下内容,用于构建前自动配置SSH环境:
mkdir -p ~/.ssh echo "$GITHUB_DEPLOY_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan github.com >> ~/.ssh/known_hosts- 提交所有变更触发Heroku构建即可。
内容的提问来源于stack exchange,提问作者iamconfusion
相关产品推荐
相关产品推荐

