批量测试 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 "有权限: {}"'