pre-receive钩子(推荐)在 Git 服务器的 hooks目录中创建 pre-receive钩子:
#!/bin/bash
# 禁止提交到master分支的SSH用户名
BLOCKED_SSH_USERS=("baduser" "anotheruser")
# 获取SSH连接的用户名
SSH_USER=$(whoami)
# 检查是否是禁止的用户
for user in "${BLOCKED_SSH_USERS[@]}"; do
if [ "$SSH_USER" = "$user" ]; then
while read oldrev newrev refname; do
# 检查是否是推送到master分支
if [[ $refname == "refs/heads/master" ]]; then
echo "错误: SSH用户 $SSH_USER 不允许提交到 master 分支" >&2
exit 1
fi
done
fi
done
exit 0update钩子#!/bin/bash
# 禁止提交到master分支的SSH用户名
BLOCKED_SSH_USERS=("baduser" "anotheruser")
# 获取SSH连接的用户名
SSH_USER=$(whoami)
# 检查是否是禁止的用户
for user in "${BLOCKED_SSH_USERS[@]}"; do
if [ "$SSH_USER" = "$user" ]; then
# 检查是否是master分支
if [ "$1" = "refs/heads/master" ]; then
echo "错误: SSH用户 $SSH_USER 不允许提交到 master 分支" >&2
exit 1
fi
fi
done
exit 0SSH 用户名获取:这种方法依赖于 whoami命令获取的 SSH 用户名,确保你的 Git 服务器正确设置了 SSH 环境。
服务器配置:
这些钩子需要放在 Git 服务器的 hooks目录中
确保钩子文件有可执行权限:chmod +x pre-receive
Git 托管服务:
对于 GitHub/GitLab 等托管服务,这种方法可能不适用
托管服务通常提供更完善的权限控制系统,建议使用它们的权限管理功能
替代方案:
考虑使用 Linux 文件系统权限控制 Git 仓库访问
使用 Git 的 authorized_keys文件限制特定用户的访问权限
测试:
部署前充分测试,避免意外阻止合法用户
考虑添加日志记录功能以便排查问题
这种方法比验证邮箱更直接,因为它基于系统级的 SSH 认证,但需要确保你的 Git 服务器正确配置了 SSH 访问控制。
最新评论: