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 0
update
钩子#!/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 0
SSH 用户名获取:这种方法依赖于 whoami
命令获取的 SSH 用户名,确保你的 Git 服务器正确设置了 SSH 环境。
服务器配置:
这些钩子需要放在 Git 服务器的 hooks
目录中
确保钩子文件有可执行权限:chmod +x pre-receive
Git 托管服务:
对于 GitHub/GitLab 等托管服务,这种方法可能不适用
托管服务通常提供更完善的权限控制系统,建议使用它们的权限管理功能
替代方案:
考虑使用 Linux 文件系统权限控制 Git 仓库访问
使用 Git 的 authorized_keys
文件限制特定用户的访问权限
测试:
部署前充分测试,避免意外阻止合法用户
考虑添加日志记录功能以便排查问题
这种方法比验证邮箱更直接,因为它基于系统级的 SSH 认证,但需要确保你的 Git 服务器正确配置了 SSH 访问控制。
最新评论: