You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Vapor应用时,如何配置Heroku用SSH密钥读取私有仓库?

Heroku部署Vapor应用私有仓库SSH密钥问题解决办法

问题重现

添加私有GitHub仓库到Vapor应用的Package.swift后,Heroku部署失败,核心报错:

Load key "/app/.ssh/id_rsa": error in libcrypto
git@github.com: Permission denied (publickey).

私有仓库依赖配置:

dependencies: [
  .package(url: "git@github.com:MyName/MyRepository.git", branch: "develop")
]

已完成的前置配置:

  • 本地密钥文件为~/.ssh/id_heroku,公钥已在GitHub和Heroku正确配置
  • Heroku应用已添加ssh-key构建包,且置于Vapor构建包之前
  • 本地.ssh/config配置了Heroku主机的密钥路径

解决步骤

1. 向Heroku传递私钥内容

Heroku构建环境无法读取本地的.ssh/config,需通过环境变量SSH_KEY传入完整私钥:

heroku config:set SSH_KEY="$(cat ~/.ssh/id_heroku)"

注意:复制私钥时要完整保留开头-----BEGIN OPENSSH PRIVATE KEY-----、结尾-----END OPENSSH PRIVATE KEY-----及中间所有行,不能遗漏或修改格式。

2. 确认构建包优先级

检查ssh-key构建包是否排在Vapor构建包之前:

heroku buildpacks

正常输出应类似:

1. https://github.com/heroku/heroku-buildpack-ssh-key.git
2. https://github.com/vapor/heroku-buildpack.git

若顺序错误,执行以下命令调整:

heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-ssh-key.git

3. 修复私钥格式问题

若仍出现error in libcrypto,检查私钥是否为标准OpenSSH格式:

  • 打开~/.ssh/id_heroku,确认开头为-----BEGIN OPENSSH PRIVATE KEY-----
  • 若格式不符,重新生成合规密钥:
ssh-keygen -t ed25519 -f ~/.ssh/id_heroku -C "your-email@example.com"

生成后将新公钥重新添加到GitHub和Heroku平台。

4. (可选)切换为HTTPS仓库地址

若SSH方式仍无法解决,可临时改用HTTPS地址配合GitHub个人访问令牌:

.package(url: "https://<github-token>@github.com/MyName/MyRepository.git", branch: "develop")

将<github-token>替换为具有仓库读取权限的GitHub个人访问令牌,建议通过Heroku环境变量管理令牌,避免硬编码风险。

内容的提问来源于stack exchange,提问作者Roland Lariotte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 19:22:29