1. 程式人生 > >十分鐘git-服務器搭建ssh登陸

十分鐘git-服務器搭建ssh登陸

blog 相關 添加 project 初始化 es2017 enable inter you

QQ820688215

微信公眾號:

技術分享圖片

1首先,創建一個操作系統用戶 git,並為其建立一個 .ssh 目錄。

$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

2需要為系統用戶 gitauthorized_keys 文件添加一些開發者 SSH 公鑰。 假設我們已經獲得了若幹受信任的公鑰,並將它們保存在臨時文件中。 與前文類似,這些公鑰看起來是這樣的:
$ 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 文件的末尾:

$ 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 文件中:

$ 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。 如果試圖登錄,你會發現嘗試被拒絕,像這樣:

$ 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.







十分鐘git-服務器搭建ssh登陸