树莓派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 #参数是用户名
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@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
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/.ssh # chmod 700 /home/git/.ssh
2,公钥文件的所有权必须是git,所属组也必须是git,权限必须是644
如果权限不对,会造成不能正常登录,报错信息:Permission denied (publickey,gssapi-with-mic.....)
posted on 2017-12-29 15:19 sichenzhao 阅读(248) 评论(0) 编辑 收藏 举报