在Windows系统上配置Git服务器,可以通过多种方式实现,其中使用Git for Windows结合SSH协议或Git自带的HTTP/HTTPS服务是最常见的方法,以下是详细的配置步骤,包括环境准备、仓库创建、用户权限管理及安全设置等内容。
环境准备
-
安装Git for Windows
下载并安装Git for Windows(官网地址:https://git-scm.com/download/win),安装过程中默认选项即可,确保勾选“Open Git Bash here”选项,方便后续命令行操作。 -
安装SSH服务(可选)
若通过SSH协议访问,需启用OpenSSH服务,在Windows搜索“管理工具”→“服务”,找到“OpenSSH Authentication Agent”和“OpenSSH SSH Server”,确保两者状态为“正在运行”,若未安装,可通过“设置”→“应用”→“可选功能”→“添加功能”搜索并安装OpenSSH服务器。 -
创建Git用户
为安全起见,建议创建专用用户运行Git服务,以管理员身份打开“计算机管理”→“本地用户和组”→“用户”,右键创建新用户(如gituser),并设置复杂密码,后续操作将以该用户身份执行。
创建Git仓库
-
初始化仓库
以gituser身份登录,或在命令行中使用runas /user:gituser cmd切换用户,选择一个目录作为仓库根目录(如D:\git-repos),执行以下命令初始化裸仓库(裸仓库不包含工作目录,仅用于代码托管):mkdir D:\git-repos\myproject.git cd D:\git-repos\myproject.git git init --bare
-
设置仓库所有者
确保仓库目录所有者为gituser,避免权限问题:icacls D:\git-repos\myproject.git /grant gituser:F
配置SSH访问
-
生成SSH密钥(客户端操作)
在客户端电脑(如开发者的Windows/Linux/macOS)打开终端,执行以下命令生成SSH密钥对:ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
公钥默认保存在
~/.ssh/id_rsa.pub,需将其内容复制到服务器的gituser的~/.ssh/authorized_keys文件中。 -
配置服务器SSH授权
在服务器上,以gituser身份创建.ssh目录并设置权限:mkdir C:\Users\gituser\.ssh echo "客户端公钥内容" >> C:\Users\gituser\.ssh\authorized_keys icacls C:\Users\gituser\.ssh /inheritance:r icacls C:\Users\gituser\.ssh /grant gituser:F
注意:
authorized_keys文件权限需设置为600,目录权限为700。 -
测试SSH连接
客户端执行:ssh gituser@服务器IP
若无需密码登录成功,则SSH配置正确。
配置HTTP/HTTPS访问(可选)
若需通过Web访问,可使用Git自带的HTTP服务或集成IIS。
-
启用Git HTTP服务
在仓库目录下创建git-daemon-export-ok文件:echo "export" > D:\git-repos\myproject.git\git-daemon-export-ok
然后通过
git daemon --export-all --base-path=D:\git-repos启动服务(需以管理员身份运行)。 -
集成IIS(推荐)
- 安装IIS及URL Rewrite模块、CGI功能(通过“启用或关闭Windows功能”)。
- 下载Git for Windows的
git-http-backend.exe(位于Git\mingw64\bin),并将其路径添加到系统环境变量PATH。 - 在IIS中创建网站,配置物理路径为仓库根目录
D:\git-repos。 - 添加URL重写规则,将请求转发至
git-http-backend,具体规则可参考Git官方文档。
用户权限管理
-
通过SSH密钥控制权限
仅将授权用户的公钥添加到authorized_keys,即可控制访问权限。 -
使用Gitosis或Gogs(进阶)
若需更精细的权限管理,可部署Gogs(轻量级Git服务),其基于Go语言开发,支持Windows,提供Web界面管理用户和仓库,下载地址:https://gogs.io/docs/installation/install_on_windows。
安全设置
-
防火墙配置
在Windows防火墙中允许SSH(默认端口22)和HTTP(端口80)/HTTPS(端口443)流量入站。 -
定期备份
定期备份仓库目录D:\git-repos,可通过任务计划程序设置定时备份脚本。 -
禁用Shell访问
为增强安全性,可在gituser的/etc/passwd文件中将其Shell设置为git-shell(需Git for Windows支持),限制其只能执行Git命令。
常见问题与解决
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| SSH连接被拒绝 | 密钥未正确配置或权限错误 | 检查authorized_keys文件权限及内容,确保.ssh目录权限为700 |
| Git推送时提示“permission denied” | 仓库所有者或权限不正确 | 使用icacls命令重新分配gituser对仓库目录的完全控制权限 |
相关问答FAQs
Q1: 如何在Windows上实现多用户同时访问Git服务器?
A1: 可通过以下步骤实现:
- 为每个用户创建独立的Windows账户(如
user1、user2),并加入gituser所在的用户组。 - 在服务器上生成各用户的SSH密钥,并将公钥分别添加到对应Windows账户的
~/.ssh/authorized_keys文件中。 - 若使用Gogs,可直接通过Web界面添加用户并分配仓库权限,无需手动管理密钥。
Q2: 配置Git服务器后,如何确保数据传输的安全性?
A2: 可采取以下措施:
- 启用HTTPS:若通过HTTP访问,配置SSL证书(可使用Let’s Encrypt免费证书),强制加密传输。
- 限制IP访问:在防火墙或IIS中设置IP白名单,仅允许特定IP地址访问Git服务。
- 定期更新:保持Git for Windows、OpenSSH及相关组件的最新版本,及时修复安全漏洞。
- 审计日志:启用IIS或SSH的日志记录,定期审查访问日志,发现异常及时处理。
