29.2 服务架设方式比较
SSH协议有两种方式来实现Git服务。第一种是用标准的SSH账号访问版本库。即用户账号可以直接登录到服务器获得shell。对于这种使用标准SSH账号的方式,直接使用标准的SSH服务就可以了,无须赘述。
第二种实现方式是所有用户都使用同一个专用的SSH账号访问版本库,访问时通过公钥认证的方式。虽然所有用户用同一个账号访问,但可以通过在建立连接时所用的不同公钥来区分不同的用户身份。Gitosis和Gitolite就是实现该方式的两个服务器软件。
标准SSH账号和专用SSH账号这两种实现方式的区别见表29-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服务器软件的基础。