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 [email protected]: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 = [email protected]
#加一個組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 [email protected]:repositories/test_project.git //加到遠程版本庫中
$ git add .
$ git commit -a -m "哈哈哈,測試一下"
$ git push origin master
換個目錄看能否clone回來
$ cd /tmp
$ git clone [email protected]:repositories/test_project //此時應該不會提示輸入ssh密碼的
最後大功告成...