使用Dokku的git:sync部署GitHub项目遇权限拒绝问题求助
解决Dokku git:sync权限拒绝问题的SSH密钥配置方案
核心逻辑
Dokku的git:sync功能是让Dokku服务器作为Git客户端主动拉取远程仓库(比如GitHub)的分支变更,所以需要给Dokku服务器配置能访问目标GitHub仓库的SSH密钥,并将对应公钥添加到GitHub仓库的部署密钥中。
具体配置步骤
1. 在Dokku服务器生成SSH密钥
登录Dokku服务器,切换到默认管理用户dokku:
su - dokku
生成高安全性的ED25519类型SSH密钥,一路回车使用默认路径和空密码:
ssh-keygen -t ed25519 -C "dokku-git-sync@your-server-domain"
查看并复制生成的公钥内容:
cat ~/.ssh/id_ed25519.pub
2. 在GitHub仓库添加部署密钥
打开目标GitHub仓库,进入「Settings」→「Deploy keys」页面:
- 点击「Add deploy key」
- 将复制的公钥内容粘贴到「Key」输入框
- 填写备注名称(比如「Dokku git:sync Key」)
- 勾选「Allow write access」(仅拉取变更可取消勾选,建议勾选避免后续权限限制)
- 点击「Add key」完成添加
3. 配置Dokku应用使用该密钥
单个应用配置
针对特定应用指定SSH密钥路径:
dokku git:sync:set <你的应用名称> ssh-key-file /home/dokku/.ssh/id_ed25519
全局配置(所有应用生效)
设置所有Dokku应用共享该密钥:
dokku git:sync:set --global ssh-key-file /home/dokku/.ssh/id_ed25519
4. 验证权限有效性
在Dokku服务器执行以下命令,测试仓库访问权限:
git ls-remote git@github.com:<你的GitHub用户名>/<你的仓库名>.git
若能输出仓库分支及提交哈希信息,说明权限配置成功,此时执行dokku git:sync <你的应用名称>即可正常拉取变更。
注意事项
- 确保SSH密钥文件权限合规:执行
chmod 700 ~/.ssh && chmod 600 ~/.ssh/id_ed25519,避免因权限过宽被Git拒绝 - 必须以
dokku用户身份生成密钥,否则Dokku进程无法读取密钥文件
内容的提问来源于stack exchange,提问作者user16540880
相关产品推荐
相关产品推荐

