在Linux下搭建Git服务器

在Linux下搭建Git服务器,第1张

众所周知,版本系统在开发环境中是必不可少的,但是我们可以把代码免费的托管到GitHub上,如果我们不原意公开项目的源代码,公司又不想付费使用,那么我们可以自己搭建一台Git服务器,可以用Gitosis来管理公钥,还是比较方便的。

搭建环境:

服务器 CentOS6.6 + git(version 1.8.3.1)

客户端 Windows10 + git(version 2.11.1.windows.1)

1. 安装Git相关软件

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

安装客户端:

下载 Git for Windows,地址:https://git-for-windows.github.io/

安装完之后,可以使用Git Bash作为命令行客户端。

安装Gitosis

出现下面的信息表示安装成功了

2. 服务器端创建git用户来管理Git服务

3. 配置公钥

在Windows上配置管理者,git服务器需要一些管理者,通过上传开发者机器的公钥到服务器,添加成为git服务器的管理者,打开git命令行

4. 配置gitosis

使用git用户并初始化gitosis

在Windows上机器上clone gitosis-admin到管理者主机

gitosis.conf: git服务器配置文件

keydir: 存放客户端公钥

配置 gitosis.conf 文件

在Windows管理者机器上创建本地test仓库,并上传到git服务端

提交到远程服务器

服务端会自动创建test仓库

5.添加其他git用户开发者

由于公司开发团队人数不断增多,手动添加开发者私钥到/home/git/.ssh/authorized_keys比较麻烦,通过上面的Windows机器的管理者统一收集其他开发者的私钥id_rsa.pub文件,然后传到服务器上,配置好后,用户即获得项目权限,可以从远程仓库拉取和推送项目,达到共同开发项目。

推送完成后,新加进来的开发者就可以进行项目的开发了,后续增加人员可以这样添加进来,开发者直接把仓库clone下来就可以了。

1. linux和windows端分别安装git,其中linux中可以用yum安装

[root@node0~]#yum install git

git的默认安装路径在/usr/libexec/git-core

[root@node0 git-core]#cd /usr/libexec/git-core

[root@node0 git-core]#git --version

git version 1.7.1

2.设置linux端git的用户名和密码

[root@node0 git-core]# groupadd git

[root@node0 git-core]# useradd wang -g git

[root@node0 git-core]# passwd wang

New password:

3.在服务器端创建远程仓库

[root@node0 ~]# mkdir -p /mnt/gitrep/wjf

[root@node0 ~]# cd /mnt/gitrep/wjf/

[root@node0 wjf]# git init

Initialized empty Git repository in /mnt/gitrep/wjf/.git/

把仓库所属用户改为wang(git的用户名)

[root@node0 wjf]# chown -R wang:git .git/

注:chown将指定文件的拥有者改为指定的用户或组 -R处理指定目录以及其子目录下的所有文件

4.在windows客户端克隆仓库 

$ git clone wang@192.168.111.60:/mnt/gitrep/wjf/.git

Cloning into 'wjf'...

The authenticity of host '192.168.111.60 (192.168.111.60)' can't be established.

RSA key fingerprint is SHA256:MgWCWF************************1m2tI.

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Warning: Permanently added '192.168.111.60' (RSA) to the list of known hosts.

wang@192.168.111.60's password:

第一次连接远程仓库,出现黑体部分,这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,键入yes,然后输入远程仓库的密码就可以了。

5.实际中也通常通过设置公钥的方式来连接远程仓库,这样就不用每次连接都需要密码了。

设置公钥:

1.在windows客户端的gitbash中生成用户私钥和公钥

$ ssh-keygen -t rsa -C "emailname@email.com"

在c盘用户路径下的/.ssh文件夹下会生成私钥id_rsa和公钥id_rsa.pub

2.linux端

首先 Git服务器打开RSA认证,即,修改/etc/ssh/sshd_config,将其中的以下三项打开

RSAAuthentication yes 

 PubkeyAuthentication yes 

 AuthorizedKeysFile .ssh/authorized_keys

然后,将客户端生成的公钥给到服务器端

即,将公钥给到 home/wang(git的用户名)/.ssh/authorized_keys

[root@node0 ~]# cd /home/wang

[root@node0 wang]# mkdir .ssh

[root@node0 wang]# chmod 777 .ssh

[root@node0 wang]# touch .ssh/authorized_keys

在windows客户端的gitbash中 执行:

$ ssh wang@192.168.111.60 'cat >>.ssh/authorized_keys' <~/.ssh/id_rsa.pub

然后在linux端:

[root@node0 wang]# chmod 600 .ssh/authorized_keys

[root@node0 wang]# chmod 700 .ssh

[root@node0 wang]# chown wang:git .ssh

[root@node0 wang]# chown wang:git .ssh/authorized_keys 

至此,以后再连接远程仓库就不需要密码了。

若仍需要密码,可以查看ssh连接日志/var/log/secure:

常见连接失败原因:Authentication refused: bad ownership or modes for directory /home/wang/.ssh 

这时需要检查该目录的所属用户和读写权限等级是否符合要求。公钥以及.ssh文件的权限应该属于git的用户和用户组,读写权限等级.ssh 700,authorized_keys 600.

首先我们分别在Git服务器和客户机中安装Git服务程序(刚刚实验安装过就不用安装了):

[root@linuxprobe ~]# yum install git

Loaded plugins: langpacks, product-id, subscription-manager

This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.

Package git-1.8.3.1-4.el7.x86_64 already installed and latest version

Nothing to do

然后创建Git版本仓库,一般规范的方式要以.git为后缀:

[root@linuxprobe ~]# mkdir linuxprobe.git

修改Git版本仓库的所有者与所有组:

[root@linuxprobe ~]# chown -Rf git:git linuxprobe.git/

初始化Git版本仓库:

[root@linuxprobe ~]# cd linuxprobe.git/

[root@linuxprobe linuxprobe.git]# git --bare init

Initialized empty Git repository in /root/linuxprobe.git/

其实此时你的Git服务器就已经部署好了,但用户还不能向你推送数据,也不能克隆你的Git版本仓库,因为我们要在服务器上开放至少一种支持Git的协议,比如HTTP/HTTPS/SSH等,现在用的最多的就是HTTPS和SSH,我们切换至Git客户机来生成SSH密钥:

[root@linuxprobe ~]# ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Created directory '/root/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

65:4a:53:0d:4f:ee:49:4f:94:24:82:16:7a:dd:1f:28 root@linuxprobe.com

The key's randomart image is:

+--[ RSA 2048]----+

|.o+oo.o. |

| .oo *.+. |

| ..+ E * o |

| o = + = . |

|S o o |

| |

| |

| |

| |

+-----------------+

将客户机的公钥传递给Git服务器:

[root@linuxprobe ~]# ssh-copy-id 192.168.10.10

root@192.168.10.10's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh '192.168.10.10'"

and check to make sure that only the key(s) you wanted were added.

此时就已经可以从Git服务器中克隆版本仓库了(此时目录内没有文件是正常的):

[root@linuxprobe ~]# git clone root@192.168.10.10:/root/linuxprobe.git

Cloning into 'linuxprobe'...

warning: You appear to have cloned an empty repository.

[root@linuxprobe ~]# cd linuxprobe

[root@linuxprobe linuxprobe]#

初始化下Git工作环境:

[root@linuxprobe ~]# git config --global user.name "Liu Chuan"

[root@linuxprobe ~]# git config --global user.email "root@linuxprobe.com"

[root@linuxprobe ~]# git config --global core.editor vim

向Git版本仓库中提交一个新文件:

[root@linuxprobe linuxprobe]# echo "I successfully cloned the Git repository" >readme.txt

[root@linuxprobe linuxprobe]# git add readme.txt

[root@linuxprobe linuxprobe]# git status

# On branch master

#

# Initial commit

#

# Changes to be committed:

# (use "git rm --cached ..." to unstage)

#

# new file: readme.txt

#

[root@linuxprobe linuxprobe]# git commit -m "Clone the Git repository"

[master (root-commit) c3961c9] Clone the Git repository

Committer: root

1 file changed, 1 insertion(+)

create mode 100644 readme.txt

[root@linuxprobe linuxprobe]# git status

# On branch master

nothing to commit, working directory clean

但是这次的操作还是只将文件提交到了本地的Git版本仓库,并没有推送到远程Git服务器,所以我们来定义下远程的Git服务器吧:

[root@linuxprobe linuxprobe]# git remote add server root@192.168.10.10:/root/linuxprobe.git

将文件提交到远程Git服务器吧:

[root@linuxprobe linuxprobe]# git push -u server master

Counting objects: 3, done.

Writing objects: 100% (3/3), 261 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To root@192.168.10.10:/root/linuxprobe.git

* [new branch] master ->master

Branch master set up to track remote branch master from server.

为了验证真的是推送到了远程的Git服务,你可以换个目录再克隆一份版本仓库(虽然在工作中毫无意义):

[root@linuxprobe linuxprobe]# cd ../Desktop

[root@linuxprobe Desktop]# git clone root@192.168.10.10:/root/linuxprobe.git

Cloning into 'linuxprobe'...

remote: Counting objects: 3, done.

remote: Total 3 (delta 0), reused 0 (delta 0)

Receiving objects: 100% (3/3), done.

[root@linuxprobe Desktop]# cd linuxprobe/

[root@linuxprobe linuxprobe]# cat readme.txt

I successfully cloned the Git repository

这篇是详细介绍Git的,中间有一部分是怎么去搭建,你可以看下


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/133695.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-17
下一篇2023-03-17

发表评论

登录后才能评论

评论列表(0条)

    保存