GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用,那么我们可以自己搭建一台Git服务器。
1、安装 openssh服务器与客户端工具
-
# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
-
# wget https://www.kernel.org/pub/software/scm/git/git-2.7.4.tar.gz
-
# tar zxvf git-2.7.4.tar.gz
-
# cd git-2.7.4
-
# make prefix=/usr/local/git all
-
# make prefix=/usr/local/git install
-
# ln -s /usr/local/git/bin/* /usr/bin/
查看版本号:git --version
git version 2.7.4
2、Git服务器打开RSA认证
在Git服务器上首先需要将/etc/ssh/sshd_config中将RSA认证打开,即:
1.RSAAuthentication yes
2.PubkeyAuthentication yes
3.AuthorizedKeysFile .ssh/authorized_keys
3、配置 git服务器
创建git服务器管理用户
-
$ adduser --system --shell /bin/sh --create-home --home-dir /home/git git
-
设置git仓库权限
-
$ chown -R git:git /home/git
-
$ chmod -R 755 /home/git
初始化全局设置
-
$ git config --global user.name "myname"
-
$ git config --global user.email "myname@server"
创建个人公钥和私钥(用于后面的git服务的管理员管理)
$ ssh-keygen -t rsa
默认情况下,公钥和私钥会保存在~/.ssh目录下,有这些文件:id_rsa id_rsa.pub known_hosts
4、切换到root, 获取并安装gitosis
-
# yum install python-setuptools
-
# cd /tmp/
-
# git clone git://github.com/res0nat0r/gitosis.git
-
# cd gitosis
-
# python setup.py install
-
显示Finished processing dependencies for gitosis==0.2即表示成功
5、ssh设置
$ su git
$ mkdir ~/.ssh
$ touch ~/.ssh/authorized_keys
$ chmod 600 /home/git/.ssh/authorized_keys
#如果有###文字,这个是gitosis生成的,不要去删除。删掉其他的sshkey就行了,不然会造成gitosis无法使用
收集所有公钥存放在.ssh/authorized_keys文件中,然后再次clone或者push的时候,就不需要再输入密码了。
$ssh-keygen -t rsa
注意不能忘记私钥的密码。默认会生成~/.ssh/id_rsa.pub公钥文件。
有了密钥以后便可初始化gitosis,使gitosis获得对Git的管理权限。
6、使用git用户并初始化gitosis
-
$ su - git
-
$ gitosis-init < ~/.ssh/id_rsa.pub //将该公匙导入gitosis里,这时本机已经有了为git的管理权限了
这样会在/home/git下面生成gitosis和repositories两个目录,后者即为存放公共库的目录。
1. 生成的gitosis-admin为Git的用户访问权限管理库,gitosis通过这个git库来管理所有git库的访问权限。
2. 通过执行初始化,该公钥的拥有者就能修改用于配置gitosis的那个特殊Git仓库了
-
$ chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
确保/home/git/repositories/gitosis-admin.git/hooks/post-update具有执行权限(755)。
7、配置服务器上的gitosis
-
$ su - git
-
$ git clone git@localhost:repositories/gitosis-admin //因为是同一台机器,所以可以用localhost
-
$ cd gitosis-admin/
-
$ ls -al
看到以下结果
gitosis.conf用来配置git项目和用户,keydir存放用户的公钥,这里的公钥对命名有严格要求,要是 用户名.pub,必须以.pub后缀结尾。
8、在成员机(ip=10.0.2.100)上生成自已的公匙,
$ sudo yum install openssh-server openssh-client
$ ssh-keygen -t rsa
$ scp ~/.ssh/id_rsa.pub root@10.0.2.8:gitosis-admin/keydir/qsh.pub //将本机的公匙copy到gitosis的keydir中
9、再切换到git服务上(ip=10.0.2.8)
$ cd ~
$ cd gitosis-admin
$ cat keydir/tester.pub >> /home/git/.ssh/authorized_keys //将tester的公匙导入到git目录的 authorized_keys文件中
10、添加GIT项目:
-
$ su - git
-
$ git clone git@hostname:repositories/gitosis-admin.git
-
$ vi gitosis.conf
-
[gitosis]
-
[group gitosis-admin]
-
writable = gitosis-admin
-
members = root@localhost.localdomain
-
#加一个组myteam
-
[group myteam]
-
members = qsh #上面公匙文件名,#多个用户用空格分开
-
writable = test_project #项目仓库名
提交到版本库
-
$ git add .
-
$ git commit -am "Allow tester write access to test_project"
-
$ git push origin master
这时qsh便有权限操作test_project仓库了,回到成员机(ip=10.0.2.100)上
-
$ cd ~
-
$ mkdir test_project
-
$ cd test_project
-
$ echo "testing ">test.txt
-
$ git init --bare //初始化本地版本
-
$ git remote add origin git@10.0.2.8:repositories/test_project.git //加到远程版本库中
-
$ git add .
-
$ git commit -a -m "哈哈哈,测试一下"
-
$ git push origin master
换个目录看能否clone回来
-
$ cd /tmp
-
$ git clone git@10.0.2.8:repositories/test_project //此时应该不会提示输入ssh密码的
最后大功告成...
本文转自奔跑在路上博客51CTO博客,原文链接http://blog.51cto.com/qiangsh/1754808如需转载请自行联系原作者
qianghong000