由于在github的共有倉庫存放代碼是開源的 , 所以有些需要保密的代碼不方便存放在github上 , 而購買github的私有倉庫的話 , 又好像沒必要 , 因此使用自己的服務(wù)器搭建一個(gè)Git服務(wù)器 , 用于實(shí)現(xiàn)代碼托管.
1.遠(yuǎn)程登錄到Ubuntu服務(wù)器
1.1設(shè)置遠(yuǎn)程請(qǐng)查看: Ubuntu16.04下設(shè)置遠(yuǎn)程登錄
1.2輸入sudo su
, 回車 , 輸入登錄密碼 , 切換到root
poorguy@ubuntu:~$ sudo su
[sudo] password for poorguy:
root@ubuntu:/home/poorguy#
2.安裝Git
2.1安裝git:
root@ubuntu:/home/poorguy# apt-get install git
2.2配置git , 配置完后 , git config --list
可以查看配置信息
root@ubuntu:/home/git# git config --global user.name "your name"
root@ubuntu:/home/git# git config --global user.email "your email"
root@ubuntu:/home/git# git config --list
user.name=your name
user.email=your email
root@ubuntu:/home/git#
3.創(chuàng)建git用戶
3.1創(chuàng)建一個(gè)git的用戶(該用戶是服務(wù)器的用戶) , 用于運(yùn)行g(shù)it服務(wù):
期間要輸入兩次新增的git用戶的登錄密碼 , 還有g(shù)it用戶的相關(guān)信息 , 可以使用默認(rèn)的 , 直接回車即可
Adding user `git' ...
Adding new group `git' (1001) ...
Adding new user `git' (1001) with group `git' ...
Creating home directory `/home/git' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for git
Enter the new value, or press ENTER for the default
Full Name []: git
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]
3.2切換到/home
目錄下 , 可以看到 , 新增了一個(gè)git
文件夾 , 這就是剛剛創(chuàng)建的git
用戶
root@ubuntu:/home/poorguy# cd ..
root@ubuntu:/home# ls
git poorguy ScatterDemo
root@ubuntu:/home#
3.3修改/home/git
的權(quán)限
root@ubuntu:/home/poorguy# chmod 755 /home/git
4.在git用戶下添加SSH信任
4.1使用su git
切換到git
用戶
root@ubuntu:/home/poorguy# su git
git@ubuntu:/home/poorguy$
4.2在/home/git
目錄下創(chuàng)建.ssh
文件夾 , 并設(shè)置讀寫權(quán)限 , 700
的意思是 只有擁有者有讀 , 寫 , 執(zhí)行權(quán)限
git@ubuntu:~$ mkdir .ssh && chmod 700
4.3在.ssh
目錄下 , 創(chuàng)建authorized_keys
文件 , 并設(shè)置讀寫權(quán)限 , 600
的意思是只有擁有者有讀 , 寫權(quán)限
touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
把要連接Git服務(wù)器的PC(比如你的筆記本)中的公鑰 , 這個(gè)文件就是在C:\Users\Administrator\.ssh
的id_ras.pub
文件 , 把該文件復(fù)制到/home/git/.ssh
目錄下 , 然后將id_rsa.pub
文件追加到authorized_keys
文件中:
git@ubuntu:~/.ssh$ ls
authorized_keys id_rsa.pub
git@ubuntu:~/.ssh$ cat id_rsa.pub >> authorized_keys
git@ubuntu:~/.ssh$
5.在git用戶下搭建git倉庫
5.1在/home/git
目錄下 , 新建一個(gè)GitProjectPlace
文件夾 , 用于存放所有的項(xiàng)目 , 然后在該目錄下新建一個(gè)testProject.git
文件夾 , 用于測(cè)試.
git@ubuntu:~$ mkdir GitProjecPlace
git@ubuntu:~$ cd GitProjecPlace/
git@ubuntu:~/GitProjecPlace$ mkdir testProject.git
git@ubuntu:~/GitProjecPlace$ cd testProject.git/
git@ubuntu:~/GitProjecPlace/testProject.git$ git init --bare
Initialized empty Git repository in /home/git/GitProjecPlace/testProject.git/
git@ubuntu:~/GitProjecPlace/testProject.git$
5.2修改git倉庫的所屬者
git@ubuntu:~/GitProjecPlace$ chown -R git:git testProject.git
6.克隆倉庫到本地
6.1在本地電腦(確認(rèn)已經(jīng)安裝git環(huán)境
)中 , 切換到工作目錄 , 使用git bash
打開 , 執(zhí)行以下命令:
Administrator@2013-20160515XD MINGW64 /e/fry_work/PoorGuy/GitVir
$ git clone git@192.168.74.128:/home/git/GitProjecPlace/testProject.git
Cloning into 'testProject'...
Enter passphrase for key '/c/Users/Administrator/.ssh/id_rsa':
warning: You appear to have cloned an empty repository.
會(huì)有提示說 , 這是一個(gè)空的倉庫.接下來 , 就可以往倉庫上傳代碼了.
7.限制Git用戶使用SSH遠(yuǎn)程登錄服務(wù)器
由于將id_rsa.pub
添加到了authorized_keys
中 , 所以被添加的開發(fā)者是可以通過SSH
遠(yuǎn)程登錄到服務(wù)器的 , 可是開發(fā)者應(yīng)該只能擁有pull
或push
, 而不能被允許直接登錄服務(wù)器 , 這樣會(huì)有一定的風(fēng)險(xiǎn) , 所以要限制通過SSH
登錄服務(wù)器.方法就是將git
用戶的shell
換成git-shell
, git-shell
能夠限制開發(fā)者只能通過SSH
進(jìn)行pull , push
等與git
相關(guān)的操作.
7.1使用cat /etc/shells
查看git-shell
是否已經(jīng)存在shells
文件中
root@ubuntu:/etc# cat shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
root@ubuntu:/etc#
7.2如果現(xiàn)在git-shell
不存在shells
中 , 使用which git-shell
查看git-shell
的安裝位置 , 一般在/usr/bin/git-shell
中
root@ubuntu:/etc# which git-shell
/usr/bin/git-shell
root@ubuntu:/etc#
7.3使用vim shells
, 將git-shell
的安裝路徑添加進(jìn)shell
文件中
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/git-shell
7.4將shell
換成git-shell
root@ubuntu:/etc# sudo chsh git -s $(which git-shell)
root@ubuntu:/etc#
7.5在本地使用SSH
遠(yuǎn)程登錄測(cè)試是否能夠登錄
$ ssh git@192.168.74.128
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to 192.168.74.128 closed.
# 服務(wù)器禁止登錄
至此 , 一個(gè)私人的Git服務(wù)器就大致搭建完成了.
You only get one life , it`s actually your duty to live it as fully as possible.
生命只有一次 , 你有責(zé)任讓它活出精彩.