在linux上跑git server
Contents
環境設定
系統: linux mint
套件: sudo apt-get install openssh-server git
基本操作
安裝完openssh-server和git後,即可開始嘗試創建remote repository。
為了之後的安全性議題,創建一個新的帳號來管理git server
sudo adduser git
下方指令新增project.git目錄做為remote repository
(我新增在此帳號的家目錄下,而git官方文件則是放在 /opt/git/ 裡)
su git
mkdir /home/git/project.git
cd /home/git/project.git
git --bare init
remote repository已經建立,可以開始使用。
git@gitserver 代表 登入帳號@serverIP位置
試著用ssh連線抓下git repository吧。
git clone git@gitserver:/home/git/project.git
git remote -v
origin git@gitserver:/home/git/project.git (fetch)
origin git@gitserver:/home/git/project.git (push)
當然push pull指令也沒問題囉~ 只要有該帳戶密碼即可。
git push origin master
git pull origin master
安全性議題 - SSH Public Key Authentication
上述推送git repository的流程中,只需要有帳號密碼即可登入。
我們可以改以更安全的SSH Public Key Authentication來登入
client
在terminal上輸入ssh-keygen
全部使用預設值後,成對的公私鑰會出現在~/.ssh裡
- 公鑰:id_rsa.pub
- 私鑰:id_rsa
公鑰長起來像這樣
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4LojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4kYjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9EzSdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myivO7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPqdAv8JggJICUvax2T9va5 gsg-keypair
server
登入管理git server的帳戶
su git
把允許連到這個server的用戶公鑰,複製貼上到~/.ssh/authorized_keys文件中。
mkdir ~/.ssh
vi ~/.ssh/authorized_keys
authorized_keys中,有幾個公鑰就放幾行。
公鑰1
公鑰2
公鑰3
...
安全性議題 - 限制shell功能
如果有人遠端登入伺服器後,使用vi、rm、touch等指令隨便更改repository內容,豈不是很危險。
因此要限制此帳戶只能拿來做為唯一用途──推送版本庫。
將原本的bash-shell改為git-shell,使此帳戶只剩下git相關功能吧。
編輯權限檔
sudo vim /etc/passwd
passwd檔案底會出現剛剛的帳戶,這行可能長這樣。
git:x :1001:1001:/home/git:/bin/sh
由左到右分別代表
帳戶:密碼(以x代替):UID(使用者識別碼):GID(群組識別碼):家目錄位置:使用的shell
將shell替代成git-shell,使此帳戶只剩下git相關功能。
git:x :1001:1001::/home/git:/usr/bin/git-shell
git-shell的位置可以用下列指令找到
which git-shell
調整完權限後,再想以ssh登入此帳戶就會出現
$ ssh git@gitserver
Welcome to Linux Mint 17.1 Rebecca (GNU/Linux 3.13.0-37-generic x86_64)
Welcome to Linux Mint
* Documentation: http://www.linuxmint.com
Last login: Sat Jun 6 19:55:30 2015 from localhost
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.
此帳號無法再使用shell囉~