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

使用Python批量克隆GitLab仓库时遇Permission denied权限错误求助

解决GitLab批量克隆脚本的Permission Denied问题

我来帮你搞定这个权限错误,Permission denied (publickey,password) 本质是你的git clone命令在拉取仓库时没有提供正确的身份凭证,咱们从几个方向来修复:

1. 改用HTTPS+Private Token的克隆方式(最推荐)

你已经在GitLab连接时用了private token,但直接用git clone默认会走SSH或者需要手动输密码,咱们把token嵌入到HTTPS克隆地址里,这样就能自动认证了:

修改你的脚本,把git clone命令改成带token的HTTPS地址,示例代码如下:

import os
from gitlab import Gitlab

# 初始化GitLab连接
gl = Gitlab('gitlab_ip', private_token='My token', ssl_verify=False)
groupsToSkip = ['my group']
gitBasePathRelative = "bkup/gitlab/temp"

# 提前创建目标目录,避免克隆时目录不存在报错
os.makedirs(gitBasePathRelative, exist_ok=True)

for p in gl.projects.list(all=True):
    # 注意:这里如果要跳过**组**,应该用p.namespace.name,p.name是项目名,别搞混了
    if p.namespace.name in groupsToSkip:
        print(f"跳过组 {p.namespace.name} 下的项目: {p.name}")
        continue
    
    # 构造带private token的HTTPS克隆链接
    gitlab_host = gl.url.strip('http://').strip('https://')
    clone_url = f"https://oauth2:{gl.private_token}@{gitlab_host}/{p.path_with_namespace}.git"
    
    # 生成项目的本地存储路径(把路径里的斜杠换成下划线,避免目录嵌套问题)
    local_path = os.path.join(gitBasePathRelative, p.path_with_namespace.replace('/', '_'))
    
    # 执行克隆命令
    clone_cmd = f"git clone {clone_url} {local_path}"
    print(f"正在克隆项目: {p.name}")
    os.system(clone_cmd)

2. 如果你坚持用SSH克隆

如果不想改HTTPS,那就要确保本地SSH密钥能被GitLab识别:

  • 把你的本地SSH公钥(一般是~/.ssh/id_rsa.pub里的内容)添加到GitLab账户的SSH密钥列表中
  • 测试SSH连接:在终端执行ssh -T git@gitlab_ip,如果返回Welcome to GitLab, @你的用户名!就说明配置成功
  • 检查SSH密钥权限:确保~/.ssh/id_rsa权限是600,~/.ssh目录权限是700,不然SSH会拒绝使用密钥

额外提醒

你原来的代码里pathToFolder1 = os.path.join(os.path.expand...没写完,记得补全路径,并且提前创建好目标目录,避免克隆时因为目录不存在报错。

内容的提问来源于stack exchange,提问作者Thu Ra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:29:04