最近由于準備在公司的服務器上面搭建靜態博客(Hexo),然后需要先搭建一個git服務器作為轉接,整個過程看似順利,十幾分鐘就搭建完成,不過最后在驗證這塊卡了兩個小時,在此記錄下來,供準備搭建git服務器的新手小伙伴們借鑒。
搭建git服務器
通過ssh鏈接到服務器,開始進行操作
第一步
在服務器上安裝 git
$ sudo apt-get install git
第二步
創建 git 用戶,用來運行git服務
$ sudo adduser git
第三步
創建證書,免密碼登錄:
收集所有需要登錄的用戶的公鑰(id_rsa.pub
)文件,把所有公鑰導入到 /home/git/.ssh/authorized_keys
文件內,一行一個。
注意:一定要通過下面的命令將該文件其他用戶的所有權限移除,否則會出現文章尾部問題
$ chmod 600 authorized_keys
第四步
初始化git倉庫
$ git init --bare test.git
git創建一個裸倉庫,裸倉庫沒有工作區,因為服務器上的git倉庫純粹為了共享,所有不能讓用戶直接登錄到服務器上去改工作區,并且服務器的git倉庫通常以 .git
結尾。然后,修改owner改為git:
$ sudo chown -R git:git test.git
第五步
禁用shell登錄:
處于安全的考慮,第二步創建的git用戶不允許登錄shell,這可以通過編輯 /etc/passwd
文件完成。
git:x:1003:1003::/home/git:/bin/bash
改為
git:x:1003:1003::/home/git:/usr/bin/git-shell
這樣,git用戶可以正常通過ssh使用git,但無法登錄shell,因為我們為git用戶指定的git-shell每次一登錄就自動退出。
第六步
克隆遠程倉庫:
現在,可以通過git clone命令克隆遠程倉庫了,在各自的電腦上運行:
$ git clone git@server:/home/git/test.git
如果服務器的ssh端口不是默認的22的話,比如說6789,可以這樣寫:
$ git clone ssh://git@server:6789/home/git/test.git
問題來了
本來根據文檔,根據廣大猿友的經驗,我的搭建之路已經完成了,然后最后一步出現了問題。每次跟服務器進行交互(clone,pull,push),都讓我輸入git的密碼,也就是說,我配置的ssh沒有生效。然后就開始到處找原因,重新生成rsa,提升authorized_keys權限,重新創建服務器git賬戶,重新。。。。。
翻遍了 Stack Overflow 和 segmentfault ,兩個小時過去了,問題仍然沒有進展,這么簡單的東西,問題到底出在哪里。
就在心灰意冷,準備放棄的時候,不知道是哪里來的靈感,準備把 authorized_keys 文件的其他用戶的權限刪掉,然后就能用了,后就能用了,就能用了,能用了,用了,了~~~~,命令如下,不想多說話,我想靜靜。
$ chmod 600 authorized_keys
最近也會持續更新git系列文章,謝謝搭建支持。
上期文章:git常用命令及使用心得