Git服务器(2)

本文介绍了如何基于SSH协议搭建Git服务器,包括创建裸仓库、拷贝仓库至服务器以及设置用户公钥授权。同时,讲解了为小型团队配置用户权限,通过在服务器上创建git用户并将成员公钥添加到authorized_keys文件,实现读写权限控制。此外,还提到了通过git-shell限制用户仅能执行Git操作,增强服务器安全性。
摘要由CSDN通过智能技术生成

2 基于SSH协议搭建Git服务器

2.1 将裸仓库放置在服务器上

在创建Git服务器时,一般会使用一个裸仓库。这个裸仓库有两种方式:一种是在服务器指定目录下使用Git命令初始化一个裸仓库,另一种是基于已有的仓库导出成一个新的裸仓库。

先来看第一种方式,这种方式的主要步骤是访问服务器、跳转到指定的文件夹、初始化裸仓库

  • 使用ssh方式访问服务器:ssh <server_user>@<server_ip>,例如:ssh jiaoxn@10.10.10.13,然后根据提示输入对应的密码
  • 跳转到指定的文件夹:cd <folder_path>,例如:cd /home/jiaoxn/git_project.git,这里需要注意的是,裸仓库的目录名的结尾都是.git,这是Git的范例
  • 初始化裸仓库:git init --bare,其中--bare选项会创建新的裸仓库,如果再添加--share选项,Git会自动像拥有通过SSH访问服务器的用户的写权限

接下来看看第二种方式,首先基于现有仓库导出一个新的裸仓库,然后将导出的裸仓库拷贝至服务器上

  • 基于现有仓库导出新的裸仓库有2种方式:
    • 使用Git命令:git clone --bare <git_project_path> <new_git_project_path>,例如:git clone /Git学习笔记/git_learn_note_202102 /my_project.git
    • 使用Linux命令:cp -Rf <git_project_path>/.git <new_git_project_path>,例如:cp -Rf Git学习笔记/git_learn_note_202102/.git /my_project.git
    • 这2种方式是有区别的,一个是目录结构上的区别,另一个是配置文件上的区别,通常来讲,建议使用第一种方式
  • 将裸仓库拷贝到服务器:scp -r <new_git_project_path> <server_user>@<server_ip:/<target_folder_path>,例如:scp -r vue-next-new.git jiaoxn@10.10.10.13:/home/jiaoxn

在服务器上配置裸仓库后,其他用户均可以使用SSH协议来克隆这个仓库:

$ git clone <server_user>@<server_ip>:<target_folder_path>

如果这些用户通过SSH登录服务器时,拥对该仓库所在的文件路径的写权限,那么这些用户也会拥有像仓库中推送数据的权限。

整个逻辑还是相对简单的,完成上述配置后,我们就拥有了可以和其他团队成员开展合作的Git服务器。需要指出的是,上述操作并没有涉及到任何的用户访问控制,Git仓库的安全性极低。

2.2 小型团队配置

如果开发团队只有几个人,那么上述配置可以满足咱们对于Git最基本的需求。但是,如果想给Git仓库添加一些用户管理,例如:允许一部分成员只有读的权限,而另外的一部分成员有写的权限,那么这种情况就会复杂很多,这种情况一般通过服务器所在的操作系统的文件系统权限来实现。

在做用户管理之前,需要为访问仓库的用户设置服务器账号,实现团队成员访问权限有几种方式:

  • 一种是为每个团队成员都创建能够访问服务器的账号,这种方式简单,但需要重复adduser命令,比较繁琐
  • 一种是只在服务器上创建git账号,然后将所有拥有写权限的用户的公钥添加到该用户的~/.ssh/authorized_keys文件中,这样每个用户可通过git账号访问服务器,对于推送到服务器上的每个提交信息中的提交作者信息不会受到影响
  • 另一种是把SSH服务器的身份验证方式替换为LDAP服务器或者其他类似的身份验证服务

接下来的几个小节围绕第二种方式来展开描述。

3 生成个人公钥

大多数Git服务器使用SSH公钥方式来对用户进行身份验证。那么SSH公钥怎么得来的呢?

SSH密钥分为私钥和公钥,私钥保存在本地,不可对外泄露,公钥保存在对应的服务器上。SSH密钥默认保存在~/.ssh目录下,私钥和公钥是成对出现的。其中,一个名字类似id_dsa或者id_rsa,这个文件就是私钥;另一个是与之对应的.pub文件,这个文件就是公钥。

SSH密钥可以通过ssh-keygen程序来创建,对于MacOS系统或者Linux系统该程序由SSH软件包来提供,Windows系统有Git for Windows提供。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jiaoxn/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/jiaoxn/.ssh/id_rsa
Your public key has been saved in /home/jiaoxn/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:VTwsvF+Mpr58z01E3mIjK6QuSqKi64l9H2q4Y+Bmv+4 jiaoxn@jiaoxn
The key's randomart image is:
+---[RSA 3072]----+
|         . o.    |
|          o.+    |
|          .o +  .|
|         .. o oo.|
|        S .+..+ +|
|.        o. .+ + |
|..... . ... .   .|
|o*=oo..o ..... o |
|@=*E+o... oo .o .|
+----[SHA256]-----+

首先,程序会询问SSH密钥保存在哪个位置,一般使用默认配置即可;然后,程序询问两遍口令,如果不想每次使用时都输入密码,该配置项可留空,直接回车跳过。

拿到个人公钥后,可以把.pub公钥文件发送给git用户,由他来配置到对应的文件中。

4 设置服务器

Ubuntu系统来演示如何在服务器上追加用户的公钥。

  1. 首先,创建git用户,并在其目录下创建.ssh目录,然后在.ssh目录下创建authorized_keys
$ sudo adduser git
$ su - git
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
  1. 将用户的公钥追加到authorized_keys文件,保持在git用户,不要切换到root用户
$ cat <*.pub_file_path> >> ~/.ssh/authorized_keys
  1. 在服务器使用第2章介绍的方法创建裸仓库

  2. 每次创建新项目时,需要有人以SSH方式登录该服务器并创建一个新的裸仓库

$ cd my_project
$ git init --bare
$ git add .
$ git commit -m "初始化仓库"
$ git remote add origin git@<server_ip>:<target_folder_path>
$ git push origin master
  1. 其他配置了公钥的成员可轻松地克隆仓库,并把做出的更改推送到服务器上

按照现在的配置,可以为团队配置并运行了一个可读写的Git服务器。但是,需要注意的是,配置公钥的这些用户,都可以通过git这个账户登录服务器并获取shell访问权限,这就意味着,这些用户可以对服务器做出破坏性的修改。

Git提供了git-shell的工具,该工具提供了有限制的shell访问,通过该工具可以限制git用户只能执行git相关的操作。这个配置操作配置起来也很简单,具体来说,需要把git用户登录时使用的shell配置为git-shell,那么使用git登录后只能操作Git相关的内容。具体操作如下:

  1. git-shell添加到/etc/shells文件中
$ cat /etc/shells # 查看文件中是否包含了git-shell
$ which git-shell # 查找git-shell的安装路径
$ sudo vi /etc/shells # 编辑文件,将git-shell的安装路径添加到文件末尾
  1. 使用chsh <username>命令来给git用户配置shell
$ chsh git # 在交互式窗口中输入git-shell的地址,一般是/user/bin/git-shell
  1. git用户的home目录下可以建立一个新的目录,用来自定义git-shell,比如,限制服务器可以接受的Git命令,又或者自定义用户在尝试SSH登录时提示的内容

  2. 此时如果git用户尝试登录,则会提示错误

接下来2天将会分享如何配置服务器使用Git协议和HTTP协议服务,以及如何在Linux服务器中部署GitLab

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值