GitLab配置SSH镜像推送GitHub报publickey权限拒绝问题
故障原因
- 本地执行
git clone、sudo ssh -vT git@github.com验证连通成功,仅代表本地机器对应用户目录下存储的SSH私钥有权限访问GitHub仓库:其中sudo调用的是本地root用户的SSH密钥,普通clone调用的是本地当前登录用户的SSH密钥,这两个验证结果和GitLab服务端的镜像推送身份完全无关。验证日志中返回Exit status 1是正常现象,因为GitHub本身不提供交互式shell访问,不代表连接配置错误。 - GitLab的SSH公钥认证镜像推送逻辑,不会复用你本地机器的任何密钥:配置镜像时GitLab会自动为该镜像条目生成一对独立的专属SSH密钥对,后续会用这对密钥的私钥发起对GitHub的SSH连接,必须把对应公钥提前添加到GitHub侧的信任列表才能认证通过
- 当前返回
Permission denied (publickey)报错,核心原因就是GitHub侧没有添加GitLab生成的对应公钥,直接拒绝了GitLab服务器的连接请求
修复步骤
- 进入GitLab对应项目的
Settings > Repository > Mirroring repositories配置页面 - 找到你已经创建的GitHub推送镜像条目,点击条目旁的「复制SSH公钥」按钮,将GitLab自动生成的公钥完整复制到剪贴板
- 登录目标GitHub账号,进入
Settings > SSH and GPG keys页面,点击「New SSH key」 - 自定义填写便于识别的Key标题(比如
GitLab-Project-Mirror),将刚才复制的GitLab公钥完整粘贴到Key输入框,点击保存 - 回到GitLab镜像配置页,点击对应镜像条目旁的重试按钮,手动触发同步即可
额外注意事项:
- 如果目标GitHub仓库归属组织账号,需要确认组织未开启第三方SSH密钥访问限制;也可以选择将GitLab生成的公钥添加到对应GitHub仓库的「Deploy Keys」列表中,同时勾选「Allow write access」权限,同样可以满足推送要求
- 配置时确认已点击「Detect host keys」按钮完成GitHub主机指纹校验,避免后续出现主机信任校验失败的问题
- 仓库URL严格按照
ssh://git@github.com/<GitHub用户名>/<仓库名>.git格式填写,不要遗漏.git后缀
配置参考截图


内容的提问来源于stack exchange,提问作者gengen
相关产品推荐
相关产品推荐

