Git 可使用四种主要的协议来传输数据:本地传输,ssh 协议,Git 协议和 HTTP 协议。 git
Git 使用的传输协议中最多见的就是 ssh 了。大多数环境已经支持经过 ssh 对服务器的访问 ,ssh 也是惟一一个同时支持读写操做的网络协议。另外两个网络协议(HTTP 和 Git)一般都是只读的。ssh 同时也是一个验证受权的网络协议;而由于其广泛性,通常架设和使用都很容易。 github
本文主要介绍如何搭建 ssh 协议的 Git 服务器。 shell
首先,你须要一台 Linux 器而且拥有 sudo 权限,本文使用的是 Debian 7.0 x32 。下面就开始安装: 安全
$ sudo apt-get install git
$ sudo adduser git
有几个办法可让团队的每一个成员都有访问权: bash
这里咱们使用第二种方法,收集全部须要登陆该 Git 服务器用户的公钥,就是他们本身的 id_rsa.pub 文件,把全部公钥导入到 /home/git/.ssh/authorized_keys 文件里,每行一个。(注意:/home/git/.ssh/authorized_keys 这个文件的 owner 为 Git ,若是不是请使用 chown 命令修改)。 服务器
下面是建立公钥命令: 网络
$ ssh-keygen -t rsa -C 'your email@domain.com'
-t 指定密钥类型,默认即 rsa ,能够省略 dom
-C 设置注释文字,好比你的邮箱 ssh
关于建立公钥的详细信息,能够参考 http://github.com/guides/providing-your-ssh-key。 ide
出于安全考虑,你能够用 Git 自带的 git-shell 工具限制 git 用户的活动范围。这能够经过编辑 /etc/passwd 文件完成。找到相似下面的一行:
把 bin/sh 改成 /usr/bin/git-shell (或者用 which git-shell 查看它的实际安装路径)
git:x:1003:1003:,,,:/home/git:/bin/bash
改成:
git:x:1003:1003:,,,:/home/git:/usr/bin/git-shell
如今 git 用户只能用 ssh 链接来推送和获取 Git 仓库,而不能直接使用服务器的 shell。尝试普通 ssh 登陆的话,会被拒绝登陆。
选定一个目录做为 Git 仓库,如 /home/git/project.git ,在 /home/git/ 目录下输入命令:
$ sudo git init --bare project.git
Git 会建立一个裸仓库,裸仓库没有工做区,由于服务器上的 Git 仓库是为了共享,因此不让用户直接登陆到服务器上去改工做区,而且服务器上的 Git 仓库一般都以 .git 结尾。而后,把 project.git 的 owner 改成 git :
$ sudo chown -R git:git project.git
ssh 指定私钥的配置管理,为本地添加 ssh 别名,编辑 ~/.ssh/config ,若是没有该文件,建立一个:
$ vi ~/.ssh/config
在 config 中添加:
# 注释说明 Host 别名 HostName 域名或 ip User 登录服务器用的帐号 Port 端口号(默认22,能够不填,若是服务器修改了 ssh 登陆端口号,此处须要修改) IdentityFile 密钥文件的位置
例如设置为:
# bingdian's git server Host gitserver HostName 162.188.23.33 User git Port 9000 IdentityFile ~/.ssh/server_rsa
如今,能够经过 git clone 命令克隆远程仓库了:
$ git clone ssh://git@gitserver:/home/git/project.git
接下来你就能够享受你的 Git 之旅了。