$ sudo adduser git $ su git $ cd $ mkdir .ssh && chmod 700 .ssh $ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
2須要爲系統用戶git
的authorized_keys
文件添加一些開發者 SSH 公鑰。 假設咱們已經得到了若干受信任的公鑰,並將它們保存在臨時文件中。 與前文相似,這些公鑰看起來是這樣的:gitauthorized_keys
$ cat /tmp/id_rsa.john.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq dAv8JggJICUvax2T9va5 gsg-keypair
3 將這些公鑰加入系統用戶 git
的 .ssh
目錄下 authorized_keys
文件的末尾:bash
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys $ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys $ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
4
如今咱們來爲開發者新建一個空倉庫。能夠藉助帶 --bare
選項的 git init
命令來作到這一點,該命令在初始化倉庫時不會建立工做目錄:服務器
$ cd /opt/git $ mkdir project.git $ cd project.git $ git init --bare Initialized empty Git repository in /opt/git/project.git/
上命令Git建立一個空倉庫,服務器上的Git倉庫一般都以.git結尾。而後,把倉庫所屬用戶改成git:
$ chown -R git:git project.git
其餘開發者能夠克隆此倉庫,並推回各自的改動,步驟很簡單:
$ git clone git@gitserver:/opt/git/project.git $ cd project $ vim README $ git commit -am 'fix for the README file' $ git push origin master
須要注意的是,目前全部(得到受權的)開發者用戶都能以系統用戶 git
的身份登陸服務器從而得到一個普通 shell。 若是你想對此加以限制,則須要修改 passwd
文件中(git
用戶所對應)的 shell 值。微信
藉助一個名爲 git-shell
的受限 shell 工具,你能夠方便地將用戶 git
的活動限制在與 Git 相關的範圍內。該工具隨 Git 軟件包一同提供。 若是將 git-shell
設置爲用戶 git
的登陸 shell(login shell),那麼用戶 git
便不能得到此服務器的普通 shell 訪問權限。 若要使用 git-shell
,須要用它替換掉 bash 或 csh,使其成爲系統用戶的登陸 shell。 爲進行上述操做,首先你必須確保 git-shell
已存在於 /etc/shells
文件中:ssh
$ cat /etc/shells # see if `git-shell` is already in there. If not... $ which git-shell # make sure git-shell is installed on your system. $ vim /etc/shells # and add the path to git-shell from last command
如今你可使用 chsh <username>
命令修改任一系統用戶的 shell:工具
$ chsh git # and enter the path to git-shell, usually: /usr/bin/git-shell 將 /usr/bin/git-shell複製回車
這樣,用戶 git
就只能利用 SSH 鏈接對 Git 倉庫進行推送和拉取操做,而不能登陸機器並取得普通 shell。 若是試圖登陸,你會發現嘗試被拒絕,像這樣:spa
$ ssh git@gitserver fatal: Interactive git shell is not enabled. hint: ~/git-shell-commands should exist and have read and execute access. Connection to gitserver closed.