搭建本地git伺服器(前面Linux版本為:Ubuntu或Debian;後面Linux版本為:CentOs)
前提:假設你已經有sudo許可權的使用者賬號
第一步:安裝git:
$ sudo apt-get install git
第二步:建立一個git使用者,用來執行git服務:
$ sudo adduser git
第三步:建立證書登陸:
將需要登陸的使用者的公鑰,即使用者的id_rsa.pub檔案,將所有公鑰匯入/home/git/.ssh/authorized_keys檔案中,一行一條公鑰
第四步:初始化Git倉庫:
選定一個目錄作為Git倉庫,假定是/srv/sample.git,在/srv目錄下輸入命令:
Git會建立一個倉庫,倉庫沒有工作區,因為伺服器上的Git倉庫純粹是為了共享,所以不讓使用者直接登入到伺服器上去改工作區,並且伺服器上的Git倉庫通常以.git結尾,然後,把owner改為git:$ sudo git init --bare sample.git
$ sudo chown -R git:git sample.git
第五步:禁用shell登入:
出於安全考慮,第二步建立的git使用者不允許登入shell,這可以通過編輯/etc/passwd檔案完成.找到類似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改為:
這樣,git使用者可以正常通過ssh使用git,但無法登入shell,因為我們為git使用者指定的git-shell每次登入就自動退出.git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
第六步:克隆遠端倉庫:
現在,可以通過git clone命令克隆遠端倉庫了,在各自電腦上運行了:
$ git clone [email protected]:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.
-----------------------------------------------------------------------------------------------------------
#以下為CentOs版本搭建git本地伺服器
第一步:安裝git:
[[email protected] Desktop]# yum install -y git
第二步:建立git使用者,用來執行git服務
# adduser git
第三步:初始化git倉庫
初始化之前先建立自己準備作為倉庫的資料夾,並進入到改資料夾位置後執行下面命令
[[email protected] git]# git init --bare learngit.git
Initialized empty Git repository in /data/git/learngit.git/
#注意後面的檔案地址為你所想設定的git倉庫位置
執行以上命令,會建立一個裸倉庫,裸倉庫沒有工作區,因為伺服器上的Git倉庫純粹是為了共享,所以不讓使用者直接登入到伺服器上去改工作區,並且伺服器上的Git倉庫通常都以.git結尾。然後,把owner改為git:
[[email protected] git]# chown git:git learngit.git
第四步:克隆遠端倉庫:
在這裡,Git伺服器就已經搭得差不多了。下面我們在客戶端clone一下遠端倉庫
[email protected] /E/testgit/8.34
$ git clone [email protected]:/data/git/learngit.git
Cloning into 'learngit'...
The authenticity of host '192.168.8.34 (192.168.8.34)' can't be established.
RSA key fingerprint is 2b:55:45:e7:4c:29:cc:05:33:78:03:bd:a8:cd:08:9d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.8.34' (RSA) to the list of known hosts.
[email protected]'s password:
#上面的顯示需要注意
第一,當你第一次使用Git的clone或者push命令連線GitHub時,會得到一個警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
這是因為Git使用SSH連線,而SSH連線在第一次驗證GitHub伺服器的Key時,需要你確認GitHub的Key的指紋資訊是否真的來自GitHub的伺服器,輸入yes回車即可。
Git會輸出一個警告,告訴你已經把GitHub的Key新增到本機的一個信任列表裡了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
這個警告只會出現一次,後面的操作就不會有任何警告了。
如果你實在擔心有人冒充GitHub伺服器,輸入yes前可以對照GitHub的RSA Key的指紋資訊是否與SSH連線給出的一致。
第二,這裡提示你輸入密碼才能clone,當然如果你知道密碼,可以鍵入密碼來進行clone,但是更為常見的方式,是利用SSH的公鑰來完成驗證。
第五步:建立SSH Key
首先在使用者主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個檔案,如果已經有了,可直接跳到下一步。如果沒有,開啟Shell(Windows下開啟Git Bash),建立SSH Key:
$ ssh-keygen -t rsa -C "[email protected]"
你需要把郵件地址換成你自己的郵件地址,然後一路回車,使用預設值即可,由於這個Key也不是用於軍事目的,所以也無需設定密碼。
如果一切順利的話,可以在使用者主目錄(root使用者在root目錄中)裡找到.ssh目錄,裡面有id_rsa和id_rsa.pub兩個檔案,這兩個就是SSH Key的祕鑰對,id_rsa是私鑰,不能洩露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
第六步:Git伺服器開啟RSA認證:然後就可以去Git伺服器上新增你的公鑰用來驗證你的資訊了。在Git伺服器上首先需要將/etc/ssh/sshd_config中將RSA認證開啟,即:
1.RSAAuthentication yes
2.PubkeyAuthentication yes
3.AuthorizedKeysFile .ssh/authorized_keys
這裡我們可以看到公鑰存放在.ssh/authorized_keys檔案中。所以我們在/home/git下建立.ssh目錄,然後建立authorized_keys檔案,並將剛生成的公鑰匯入進去。
然後再次clone的時候,或者是之後push的時候,就不需要再輸入密碼了:
[email protected]/E/testgit/8.34
$ git clone [email protected]:/data/git/learngit.git
Cloning into 'learngit'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
第七步:禁用git使用者的shell登陸:
出於安全考慮,第二步建立的git使用者不允許登入shell,這可以通過編輯/etc/passwd檔案完成。找到類似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
最後一個冒號後改為:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
這樣,git使用者可以正常通過ssh使用git,但無法登入shell,因為我們為git使用者指定的git-shell每次一登入就自動退出。
#兩種方式分別為廖雪峰網站提供和CSDN其他博主提供,感謝知識分享!