向群晖Synology git服务器推送新仓库无需预先SSH创建裸仓库问题求助
解决方案
方案1:Git命令代理脚本(原生Git套件可用,无需额外装软件)
这个方案完全保留你当前的Git使用方式,同时关闭用户交互式SSH权限,实现推送自动创建裸仓库:
- 编写Git命令代理脚本
登录你的群晖SSH(仅本次配置操作需要,配置完成后普通用户无法进行交互式SSH登录),切换到你的Git用户,在家目录下创建git-command-proxy.sh,内容如下:
#!/bin/sh # 解析Git请求命令与仓库路径 GIT_OP=$(echo "$SSH_ORIGINAL_COMMAND" | awk '{print $1}') RAW_REPO=$(echo "$SSH_ORIGINAL_COMMAND" | awk '{print $2}' | sed "s/'//g") # 替换为你实际的仓库存储根目录,这里示例用家目录下的git目录 FULL_REPO="$HOME/git/$RAW_REPO" # 仅对推送操作且仓库不存在的场景自动创建裸仓库 if [ "$GIT_OP" = "git-receive-pack" ] && [ ! -d "$FULL_REPO" ]; then mkdir -p "$FULL_REPO" cd "$FULL_REPO" git init --bare --quiet # 按需调整权限,这里设置为用户本人读写、同组用户可读写 chmod -R 770 "$FULL_REPO" fi # 执行原始Git请求 exec $SSH_ORIGINAL_COMMAND
给脚本添加执行权限:
chmod 755 ~/git-command-proxy.sh
- 配置SSH公钥强制调用代理
编辑Git用户家目录下的~/.ssh/authorized_keys文件,在每个允许访问的公钥行前添加强制命令与权限限制参数,修改后的格式如下:
command="/var/services/homes/你的Git用户名/git-command-proxy.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty 你的公钥内容 公钥备注
- 其中
command后的路径替换为你刚才创建的脚本的绝对路径 - 末尾的
no-pty参数会禁止该公钥对应的用户开启交互式SSH会话,完全满足你的权限要求
配置完成后,本地无需提前在服务端创建仓库,直接执行git remote add、git push命令即可自动触发服务端创建对应的裸仓库。
方案2:部署轻量Git托管服务(适合多用户、需要更多权限控制的场景)
如果需要更完善的Git管理能力,可直接在群晖社群套件源中安装Gitea:
- Gitea是轻量级的自托管Git服务,自带Web管理界面,支持用户权限管理、仓库自动创建、提交日志查看等功能
- 无需手动执行裸仓库创建命令,用户在Web界面点击创建仓库、或者直接按规则推送即可生成对应仓库
注意事项
- 请确保Git用户对仓库存储根目录(也就是你之前的
~/git目录)拥有读写执行权限 - 若群晖升级Git套件后出现异常,可检查
git-receive-pack等命令的路径是否正常,重新设置脚本执行权限即可
内容的提问来源于stack exchange,提问作者theheadofabroom
相关产品推荐
相关产品推荐

