git单用户升级多用户

0 阅读6分钟

这份手册默认是单用户基础版,但可以基于它改造实现多电脑、多用户的协作,并非完全不支持,核心区别在于原手册仅配置了单个git系统用户+无精细化权限控制,改造后就能实现多用户分别用SSH密钥认证、按需分配仓库权限,满足多电脑协作需求。

1. 单用户

先明确原手册的核心局限(单用户根源)

  1. 仅创建了一个系统级git用户,所有客户端都通过这个用户连接服务器,无法区分不同操作用户;
  2. 无仓库权限管控,所有能连接的客户端都能对仓库进行push/pull,无法实现“部分用户只读、部分用户可写”;
  3. 仅配置了一个客户端的SSH公钥,默认只有这一台电脑能免密访问。

改造思路:基于原手册,实现「多电脑+多用户协作」 原手册的裸仓库基础搭建逻辑是通用的,只需补充多用户SSH密钥管理可选的权限控制,就能满足协作需求,分「轻量版(仅多用户免密协作,无精细化权限)」和「进阶版(多用户+精细化权限控制)」,适配不同协作场景。

2. 轻量版(多电脑/多用户)

快速实现多电脑/多用户免密协作(无精细化权限)

适合小团队、信任度高的场景,所有用户都能对仓库进行读写操作,仅需为每个用户/每台电脑添加SSH公钥即可,基于原手册直接改造,步骤极简:

2.1 核心原理

所有协作用户仍通过服务器的git系统用户连接,但将每个用户/每台电脑的SSH公钥都追加到服务器git用户的authorized_keys文件中,实现多端免密访问。

2.2 具体步骤

  1. 各客户端生成自己的SSH密钥 每个用户在自己的电脑上执行(一路回车,无需设置密码):

    ssh-keygen -t rsa -C "自己的邮箱/用户名标识"
    

    生成后在~/.ssh/目录下得到id_rsa(私钥)和id_rsa.pub(公钥)。

  2. 服务器端追加所有公钥到authorized_keys 登录服务器,切换到git用户,将每个客户端的公钥追加到文件中(不要用echo > 覆盖,要用echo >> 追加):

    su - git
    # 追加第一个用户的公钥
    echo "第一个用户的id_rsa.pub完整内容" >> ~/.ssh/authorized_keys
    # 追加第二个用户的公钥
    echo "第二个用户的id_rsa.pub完整内容" >> ~/.ssh/authorized_keys
    # 以此类推,添加所有协作用户/电脑的公钥
    

    追加后重新确认权限(必须严格,否则SSH认证失败):

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    
  3. 各客户端配置远程仓库并测试 每个用户在自己的电脑上克隆仓库/配置远程地址,即可免密push/pull

    # 克隆仓库(替换服务器IP)
    git clone git@服务器IP:/home/git/repositories/myrepo.git
    # 本地提交后直接推送,无需输密码
    git push origin master
    

轻量版优势 完全基于原手册,零额外工具、仅2步改造,快速实现多电脑/多用户协作,适合小团队快速上手。

3. 进阶版(多用户+精细权限)

多用户+精细化权限控制(不同用户不同权限)

适合中大型团队、需要管控仓库权限的场景(如部分用户只读、部分用户可写、不同用户访问不同仓库),在原手册基础上,新增Gitolite工具(轻量Git权限管理工具,无需复杂配置),替代原生裸仓库的无权限模式。

3.1 核心原理

用Gitolite接管服务器的Git仓库管理,通过配置文件定义用户列表仓库权限,所有用户仍通过git系统用户连接,但Gitolite会根据公钥标识区分不同用户,并匹配对应的权限。

3.2 核心改造步骤(基于原手册)

  1. 服务器端卸载原裸仓库的简易配置(保留git用户)

    su - git
    # 删除原裸仓库(若已有项目,可先备份)
    rm -rf /home/git/repositories/myrepo.git
    exit
    
  2. 安装Gitolite并初始化(接管权限管理)

    # 安装gitolite(CentOS)
    yum install gitolite -y
    # 以git用户初始化,指定管理员公钥(用第一个管理员的id_rsa.pub内容,替换成实际的)
    su - git
    gitolite setup -pk /tmp/管理员公钥.pub
    exit
    

    初始化后,Gitolite会自动创建~/repositories/仓库目录,所有仓库由Gitolite管理。

  3. 管理员配置多用户+仓库权限 管理员克隆Gitolite的配置仓库,修改配置文件定义用户和权限,推送到服务器即可生效:

    # 管理员在自己电脑上克隆配置仓库
    git clone git@服务器IP:gitolite-admin.git
    cd gitolite-admin
    
    • 添加用户:将所有协作用户的id_rsa.pub文件复制到keydir/目录下(文件名=用户名,如zhangsan.publisi.pub);
    • 配置权限:编辑conf/gitolite.conf,定义仓库和用户权限,示例:
      # 定义仓库myrepo
      repo myrepo
          # 管理员zhangsan拥有读写权限
          RW+     = zhangsan
          # 开发人员lisi拥有读写权限
          RW      = lisi
          # 测试人员wangwu仅拥有只读权限
          R       = wangwu
      
    • 推送配置到服务器,使权限生效:
      git add .
      git commit -m "添加用户并配置myrepo权限"
      git push origin master
      
  4. 各用户克隆仓库并测试权限 每个用户在自己电脑上克隆仓库,Gitolite会自动匹配权限,例如只读用户无法执行push

    # 所有用户克隆仓库的命令一致
    git clone git@服务器IP:myrepo.git
    

3.3 进阶版优势

实现用户隔离+精细化权限控制,满足团队协作的权限管控需求,且Gitolite轻量,无需像GitLab那样占用大量服务器资源。

4. 总结

  1. 这份手册并非不能实现多电脑/多用户协作,只是默认是单用户基础版,无权限控制;
  2. 轻量改造(仅追加SSH公钥):适合小团队,零额外工具,快速实现多端免密协作;
  3. 进阶改造(新增Gitolite):适合需要权限管控的团队,实现用户隔离和精细化权限;
  4. 对比GitLab:这种原生Git+Gitolite的方式,服务器资源占用极低(适合低配服务器),而GitLab需要至少2G内存,适合资源充足、需要可视化界面的场景。

简单说,如果你只是小团队几个人协作,直接用轻量版改造就够了,基于原手册5分钟就能搞定;如果需要权限管控,再用Gitolite进阶改造。