在Ubuntu上搭建git服务器

在Ubuntu上搭建git服务器的详细步骤:

       1.安装git

         Linux作为服务器端系统,Windows作为客户端系统,分别安装Git
         服务器端:

[admin@admin ~]$ su root                  #切换到root用户名
Password:                                   #输入root用户的密码
[root@admin ~]# apt-get install -y git        #执行该命令进行Git安装
         安装完后,查看Git版本

[root@admin ~]# git --version
git version 1.8.3.1
        客户端:
        下载 Git for Windows,地址:https://git-for-windows.github.io/
         安装完之后,可以使用 Git Bash 作为命令行客户端。
         安装完之后,查看 Git 版本

$ git --version
git version 2.11.0.windows.1
    2.linux服务器端创建新用户来管理git仓库

[root@admin ~]# cd /home                                  #进入/home/目录
[root@admin home]# id git                                 #查看git用户是否存在
id: git: no such user                                       #提示git用户不存在
[root@admin home]# useradd git                            #创建git用户
[root@admin home]# passwd git                             #为git用户创建密码
Changing password for user git.
New password:                                               #设置密码
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:                                        #确认密码
passwd: all authentication tokens updated successfully.
   3.创建git仓库,并且将管理者变成新创建的git用户

          设置 /home/git/repository/gittest.git 为 Git 仓库

[root@admin home]# mkdir -p ./git/repository/gittest.git       #在git用户目录下创建仓库目录repositroy,并且创建gittest.git项目测试目录
[root@admin home]# ls                    #查看/home/目录下有哪些用户目录
admin  git
[root@admin home]# cd git                #进入git用户目录
[root@admin git]# ls                     #查看git用户目录下有哪些目录/文件
repository
[root@admin git]# cd repository/         #进入repository仓库目录
[root@admin repository]# ls              #查看仓库目录下的项目目录
gittest.git
[root@admin repository]# git init --bare ./gittest.git      #这步很重要,初始化项目测试目录
Initialized empty Git repository in /home/git/repository/gittest.git/
然后把 Git 仓库的 owner 修改为 git
 
[root@admin git]# ll                        #查看gittest.git项目文件夹的拥有者
total 4
drwxr-xr-x 3 root root 4096 Jan 13 13:08 repository         #拥有者是root用户名
[root@admin git]# chown -R git:git repository  #将拥有者改为git用户
[root@admin git]# ll                         #再次查看gittest.git项目文件夹的拥有者
total 4
drwxr-xr-x 3 git git 4096 Jan 13 13:08 repository        #拥有者是git用户
  4.windows客户端clone项目

        要在windows上的git clone项目下来的话,需要保证linux上安装了ssh的服务器,如果安装了的话,要保证ssh服务器开启了,这个可以百度查询一下:

root@admin:/# apt-get install openssh-server      #安装ssh服务器
         然后打开windows上的git新建一个文件夹来放置git项目,通过服务器的ip可以将git项目复制下来

JayYang@YJ-PC MINGW64 ~/Desktop                #在桌面打开的git bash
$ cd /d                                        #进入D盘
JayYang@YJ-PC MINGW64 /d
$ mkdir gittest                                #创建gittest文件夹
JayYang@YJ-PC MINGW64 /d
$ cd gittest/                                  #进入gittest文件夹
JayYang@YJ-PC MINGW64 /d/gittest               #显示当前在D:\gittest路径下
$ git clone git@服务器公网IP地址:/home/git/repository/gittest.git  #IP地址后面跟冒号,冒号后面是刚才初始化的项目文件夹的绝对路径
 
#当第一次连接到目标 Git 服务器时会得到一个提示:
 
The authenticity of host '118.178.142.77 (118.178.142.77)' can't be established.
ECDSA key fingerprint is SHA256:JwC9NxLIjBGqtLC2NUk8MulSc3XH3mM5AWMcFz0a5/8.
Are you sure you want to continue connecting (yes/no)? yes
选择 yes:
Warning: Permanently added '118.178.142.77' (ECDSA) to the list of known hosts.
#此时 C:\Users\用户名\.ssh 下会多出一个文件 known_hosts,以后在这台电脑上再次连接目标 Git 服务器时不会再提示上面的语句。
#【说明】如果你的服务器没有配置SSH连接,那么按照正常情况会让你输入git用户的密码,输入正确后就能进行项目克隆了。
       上面的clone方法每次clone文件都要输入服务器端用户的密码,还是比较麻烦的,因此下面我将介绍用公钥的方式来clone git项目。

5、客户端创建 SSH 公钥和私钥

       (1)、打开windows的git,通过命令:

执行命令 :ssh -keygen -C "[email protected]"
此时 C:\Users\用户名\.ssh 下会多出两个文件 id_rsa 和 id_rsa.pub
id_rsa_git 是私钥
id_rsa_git.pub 是公钥
      (2)、在ubuntu下切换到git账号,创建保存公钥的文件夹

[root@admin ~]# vim /etc/ssh/sshd_config   #root用户下,编辑/etc/ssh/sshd_config文件
#按如下设置这三个配置,如果注释掉了,则去掉前面的#号
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
#保存并重启 sshd 服务:
 
sudo service sshd restart  #重启sshd服务
 ##由 AuthorizedKeysFile 得知公钥的存放路径是 .ssh/authorized_keys,实际上是 
 ##$Home/.ssh/authorized_keys,由于管理 Git 服务的用户是 git,所以实际存放公钥的路径是 
 ##/home/git/.ssh/authorized_keys
 ##在 /home/git/ 下创建目录 .ssh
 
[root@admin ~]# cd /home/git
[root@admin git]# pwd
/home/git
[root@admin git]# mkdir .ssh
然后把 .ssh 文件夹的 owner 修改为 git
 
[root@admin git]# chown -R git:git .ssh
[root@admin git]# ll -a | grep .ssh
drwxr-xr-x 2 git  git  4096 Jan 13 14:54 .ssh
    (3)、客户端导入公钥

           回到客户端Git Bash 下,导入文件:

           $ ssh git@服务器公网IP地址 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

           当然也可以直接将公钥的数据直接复制到.ssh/authorized_keys里面。

           回到服务器端,查看 .ssh 下是否存在 authorized_keys 文件:           

[root@admin ~]# cd /home/git/.ssh/
[root@admin .ssh]# ll
total 4
-rw-rw-r-- 1 git git 398 Jan 13 15:03 authorized_keys
[root@admin .ssh]# cat authorized_keys      #查看客户端生成的公钥
**重要:**
**修改 .ssh 目录的权限为 700**
**修改 .ssh/authorized_keys 文件的权限为 600**
 
[root@admin git]# chmod 700 .ssh
[root@admin git]# cd .ssh/
[root@admin .ssh]# chmod 600 authorized_keys
      (4)、客户端再次clone项目

$ git clone git@服务器公网IP地址:/home/git/repository/gittest.git  #IP地址后面跟冒号,冒号后面是刚才初始化的项目文件夹的绝对路径
            这次会发现项目clone不需要密码了

      (5)、禁用git用户ssh登陆服务器

            因为我们既然使用了公钥来clone下来项目,那么就需要禁用git用户通过ssh登陆服务器来保证安全。

[root@admin]# sudo vi /etc/passwd            #编辑/etc/passwd文件
#找到:
 
git:x:1001:1001::/home/git:/bin/bash
#修改为:
git:x:1001:1001::/home/git:/bin/git-shell
此时 git 用户可以正常通过 ssh 使用 git,但无法通过 ssh 登录系统。
  6、扩展    

     管理公钥
       如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就不能这么搞了,这时,可以用Gitosis来管理公钥,想了解的可以百度具体查询一下。

     管理权限
       有很多公司很看重源代码,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。
————————————————
原文链接:https://blog.csdn.net/baidu_38661691/article/details/88658033

发布了14 篇原创文章 · 获赞 15 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/wukery/article/details/105265080