欢迎光临
我们一直在努力

在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 "your@email.com" 此时 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就是这个工具。

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:在Ubuntu上搭建git服务器
文章链接:https://www.jmwz.net/2051.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到: 更多 (0)