跳转到内容
Go back

批量测试 SSH 密钥对 Git 仓库的访问权限

更新于:

批量测试 SSH 密钥对 Git 仓库的访问权限

我习惯使用 ssh 密钥来简化访问私有 gitea 中的仓库,时间一久,就忘记哪些仓库添加了特定的私钥。

前两天,想在 gitea 中添加一个用户级别的 ssh 密钥,但 gitea 总是提示这个密钥已在系统中,翻了下设置,也没办法查询究竟是哪个仓库配置这个特定的私钥,挨个仓库去检查又过于烦琐。

通过 deepseek 了解到可以使用 git ls-remote 来查询 ssh 密钥对 git 仓库的访问权限,根据我的实践,记录一下步骤:

git ls-remote 这个命令会尝试连接远程仓库并获取引用列表(如分支、标签),但不会下载整个仓库。如果成功,说明有权限;如果失败(认证失败),则说明没有权限。

# 语法
git ls-remote YOUR_REPO_SSH_URL

# 示例:测试一个仓库
git ls-remote git@github.com:someuser/somerepo.git

# 在脚本中使用,并检查退出状态码
if git ls-remote "$repo_url" &> /dev/null; then
    echo "有权限访问: $repo_url"
else
    echo "无权限访问: $repo_url"
fi

所以我直接在 gitea 的管理员页面,直接复制全部仓库的表格到一个 txt 中,写了个 shell 脚本,使用 awk 对 txt 进行格式的预处理,然后用 xargs 批量调用 git ls-remote 进行进行查询:

awk 'NF >= 3 {print "git@git.httpx.online:"$2"/"$3}' repos.txt | \
xargs -I{} sh -c 'git ls-remote {} >/dev/null 2>&1 && echo "有权限: {}"'

分享文章至:

Previous Post
查询最近 40 个 Commit 中 Src 目录的 Diff
Next Post
Excel 获取本周周一至周五日期公式