树莓派3+centos7实现git服务器

安装git:

一、在/usr/local下新建目录git,并下载源码

wget https://www.kernel.org/pub/software/scm/git/git-2.15.1.tar.gz

解压:

tar -xzvf git-2.15.1.tar.gz

进入目录,然后安装git

make prefix=/usr/local/git all
make prefix=/usr/local/git install


二、安装过程中的各种错误

1. 出现cc不存在这种错误,表明gcc和g++没有安装:

yum install gcc 
yum install gcc-c++ 


2. 致命错误:openssl/ssl.h:没有那个文件或目录

需要安装以下依赖

sudo yum install openssl-devel


3. http.h:6:23: 致命错误:curl/curl.h:没有那个文件或目录

#include <curl/curl.h> 

安装:

yum install libcurl-devel


4. http-push.c:19:19: 致命错误:expat.h:没有那个文件或目录

安装:

yum install expat-devel


5. Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at Makefile.PL line 3.
BEGIN failed--compilation aborted at Makefile.PL line 3.
make[1]: *** [perl.mak] 错误 2
make: *** [perl/perl.mak] 错误 2

安装:

yum install perl-ExtUtils-MakeMaker package 


6. * tclsh failed; using unoptimized loading

安装:

yum install -y gettext


以上就是安装过程中碰到的一些问题。



三、添加路径至PATH

sudo vim /etc/profile
export PATH="/usr/local/git/bin:$PATH" 
source /etc/profile #使配置立即生效



搭建git服务器:

一、创建一个新的用户git用来运行git

groupadd git
useradd git -g git
passwd git  #参数是用户名


最好切换到git用户 不然后面新建的git仓库都要改权限。

su - git


二、初始化git服务。

cd /home/git

git init --bare test.git

chown git:git test.git


三、将git-upload-pack进行软链接,以确保客户端进行git clone不会报错:

ln -s /usr/local/git/bin/git-upload-pack /usr/bin/git-upload-pack

这就算初步完成了git服务端的搭建。


四、搭建完成,进行测试

在另一台PC(客户端)进行git clone操作:

git clone git@192.168.1.103:/home/git/test.git

但是发现要输入git服务器的密码,这对客户端造成了影响,为了避免所有客户端在git时需要密码,可以添加证书登陆,这也是github的管理方法,每个客户端将自己的公钥给服务端保存,这样就存在一个认证关系了。


五、开启RSA认证

在git服务器上打开RSA认证:/etc/ssh/sshd_config

sudo vim /etc/ssh/sshd_config

 RSAAuthentication yes
 PubkeyAuthentication yes
 AuthorizedKeysFile /home/git/.ssh/authorized_keys #你的authorized_keys所在路径


在新建的git(/home/git)下新建.ssh文件夹,并新建一个authorized_keys文件用来存放客户端的公钥。

这里必须利用su - git将用户切换为git,再进行新建文件夹和文件的操作,这样保证.ssh和authorized_keys文件的所有者都是git。

$ cd /home/git/
$ su - git #切换用户为git
$ mkdir .ssh #新建文件夹
$ chmod 700 .ssh 
$ touch .ssh/authorized_keys  #新建文件
$ chmod 644 .ssh/authorized_keys

将客户端的公钥文件(id_rsa.pub)中的内容复制到authorized_keys文件中。要注意复制中不要漏掉字母,开头一般是:ssh-rsa。


六、git用户设置为不能shell登录

vim /etc/passwd
找到:

git:x:502:502::/home/git:/bin/bash
改为
git:x:502:502::/home/git:/usr/local/git/bin/git-shell


七、最终测试

在客户端运行git clone命令:

git clone git@192.168.1.103:/home/git/test.git

可以直接下载,不用输入密码。


在客户端上运行git push命令

首先在要推送的文件夹下,运行git init初始化git仓库:

git init
然后,运行git status查看哪些文件尚未add,然后运行git add将尚未add的文件add,然后commit。

git status
git add . //.表示将所有修改的文件都add
git commit -m "test" //提交一个commit


当然要确保origin已经添加了:

git remote -v #查看服务器地址是否存在


没有的话则添加:

 git remote add origin git@192.168.1.103:/home/git/test.git

然后可以执行git push:

git push origin master:master

origin表示推送到origin远程,第一个master是本地分支,第二个master是远程分支,如果该远程分支不存在将被创建。



注意点:

SSH对公钥,私钥的权限和所有权的要求是非常严格的,总结如下:


1,下面两个目录的所有权必须是git(上面创建的git用户),所属组也应该是git,权限必须为700

①/home/git # chmod 700 /home/git

②/home/git/.ssh # chmod 700 /home/git/.ssh

2,公钥文件的所有权必须是git,所属组也必须是git,权限必须是644

①/home/git/.ssh/authorized_keys #c hmod 644 /home/git/.ssh/authorized_keys

如果权限不对,会造成不能正常登录,报错信息:Permission denied (publickey,gssapi-with-mic.....)





posted on 2017-12-29 15:19  sichenzhao  阅读(248)  评论(0编辑  收藏  举报

导航