gpt4 book ai didi

git - 如何根据给定的 ssh key 限制 git SSH 访问

转载 作者:行者123 更新时间:2023-12-02 14:13:19 27 4
gpt4 key购买 nike

我有一个私有(private) git 服务器,只有一个用户 git 和 ssh key 身份验证。目前,只有我一个人在用,但我想加更多人,我希望每个人都使用用户 git 连接到服务器并执行 git clone, git push 等。如果所有存储库都是“公开的”,那么我知道如何解决这个问题。但是例如我想有一个私有(private)存储库,我仍然会使用我的 SSH key 通过 git clone git@server:repo 克隆它,但是我不希望其他用户能够使用他们的 SSH key 。

我查看了有关设置服务器的 git-scm 文档(这对公共(public)存储库很有帮助),以及 this帖子,但是这篇帖子似乎只解决了私有(private)存储库的问题。

TLDR:当你在 GitHub 上克隆一个存储库时,你说 git clone git@github.com:user/repo 并且你的 git 用户名和 ssh key 正在被发送过来。现在,根据您是否拥有此存储库的权限,您可以克隆它,否则不能。所以基本上,每个人都在表面上使用 git 用户,但在幕后进行了一些授权。例如,GitHub 如何处理这个问题?

最佳答案

gitolite似乎正是您正在寻找的基于 ssh key 管理对存储库/分支的访问。

但是如果你想从头开始构建这样的东西,你需要查看 authorized_keys 文件中的选项,尤其是 commandenvironment .有了这些,您可以根据使用的 ssh key 强制执行特定的命令/脚本或添加/覆盖环境变量。

例如,您可以编写一个脚本,读取用户允许的存储库作为其参数,并强制它针对选定的 ssh key 运行:

# file ~/.ssh/authorized_keys
command="/home/git/bin/git-only-shell /home/git/repos/repo1" ssh-rsa AAAAB2...
command="/home/git/bin/git-only-shell /home/git/repos/repo1 /home/git/repos/repo2" ssh-rsa AAAAB3...

脚本现在可以从 $SSH_ORIGINAL_COMMAND 读取请求的 repo,并检查它是否包含在传递的列表中。此脚本 git-only-shell 的完整但粗略的示例实现可能是这样的:

#!/bin/bash

# verify that $SSH_ORIGINAL_COMMAND starts with git-upload-pack, git-upload-archive or
# git-receive-pack, followed by a space
if ! [[ "$SSH_ORIGINAL_COMMAND" == git-upload-pack\ * || "$SSH_ORIGINAL_COMMAND" == git-upload-archive\ * || "$SSH_ORIGINAL_COMMAND" == git-receive-pack\ * ]]; then
echo "unsupported command" >&2
exit 1
fi

# remove first word (git command)
ARGUMENTS="${SSH_ORIGINAL_COMMAND#git-* }"

# use eval to un-quote repo path (it is passed in single-quotes)
REPO_PATH="$(eval "echo $ARGUMENTS")"

# allowed repos are passed as arguments to this script
ALLOWED_REPOS="$@"

# check if repo was whitelisted
IS_ALLOWED=false
for repo in $ALLOWED_REPOS; do
if [[ "$REPO_PATH" == "$repo" ]]; then
IS_ALLOWED=true
fi
done

if [[ $IS_ALLOWED == "false" ]]; then
echo "access to this repo not allowed" >&2
exit 1
fi

# execute the original command
eval "$SSH_ORIGINAL_COMMAND"

关于git - 如何根据给定的 ssh key 限制 git SSH 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63132448/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com