29.2 服务架设方式比较

SSH协议有两种方式来实现Git服务。第一种是用标准的SSH账号访问版本库。即用户账号可以直接登录到服务器获得shell。对于这种使用标准SSH账号的方式,直接使用标准的SSH服务就可以了,无须赘述。

第二种实现方式是所有用户都使用同一个专用的SSH账号访问版本库,访问时通过公钥认证的方式。虽然所有用户用同一个账号访问,但可以通过在建立连接时所用的不同公钥来区分不同的用户身份。Gitosis和Gitolite就是实现该方式的两个服务器软件。

标准SSH账号和专用SSH账号这两种实现方式的区别见表29-1。

29.2 服务架设方式比较 - 图1

实际上,标准SSH也可以用公钥认证的方式实现所有用户共用同一个账号,不过这类似于把一个公共账号的登录口令同时告诉给多个人。具体操作过程如下:

(1)在服务器端(server)创建一个公共账号,例如anonymous。

(2)管理员收集需要访问git服务的用户公钥。如:user1.pub、user2.pub。

(3)使用ssh-copy-id命令将各个git用户的公钥远程加入服务器(server)的公钥认证列表中。

远程操作,可以使用ssh-copy-id命令。


$ssh-copy-id-i user1.pub anonymous@server

$ssh-copy-id-i user2.pub anonymous@server


如果直接在服务器上操作,则直接将文件追加到authorized_keys文件中。


$cat/path/to/user1.pub>>~anonymous/.ssh/authorized_keys

$cat/path/to/user2.pub>>~anonymous/.ssh/authorized_keys


(4)在服务器端的anonymous用户主目录下建立git库,就可以实现多个用户利用同一个系统账号(anonymous)访问Git服务了。

这样做除了不必逐一设置账号,以及用户无须口令认证之外,标准SSH部署Git服务的缺点一个也不少,而且因为用户之间无法区分,更无法针对用户进行授权。

下面重点介绍一下SSH公钥认证,因为它们是后面即将介绍的Gitosis和Gitolite服务器软件的基础。