CVS服务器的安装配置与SSH隧道传输配置


一、CVS的安装
1.查看是否安装了CVS(系统默认自带CVS):
#rpm -qa|grep cvs
如果没有cvs可以在RHEL的安装盘上找到,也可以直接到www.cvshome.org下载。

2.建立cvs用户组
#groupadd cvs

3.建立cvs组的cvsroot用户和所属目录
#useradd -g cvs -d /cvs cvsroot
#useradd -g cvs -M cvssuper

4.创建/cvs目录并改变其属性
#mkdir /cvs
#chmod -R 774 /cvs

5.用cvsroot用户登录
#su - cvsroot

6.创建项目目录
#cd /cvs
#mkdir Project

7.建立项目仓库
#cvs -d /cvs/Project init
#chmod -R 774 Project
这里可根据实际情况修改Project名称,重复该步骤来添加多个不同的仓库。

8.建立CVS服务启动文件,推荐采用xinetd方式
#su - root
#cd /etc/xinetd.d

#vi cvs
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/cvs/Project --allow-root=/cvs/Doc pserver
log_on_failure += USERID
only_from = 192.168.0.0/16
}

其中,
only_from是用来限制访问的,可以根据实际情况删除或者修改;
--allow-root是允许的仓库列表,可以根据实际情况添加。

9.添加CVS服务
#vi /etc/services
cvspserver 2401/tcp #pserver cvs service
cvspserver 2401/udp #pserver cvs service
先确认该文件里面是否存在上面两行的内容,如果已经有了,就不要再重复增加了,避免出错。

10.启动CVS服务
#/etc/init.d/xinetd restart

11.检查cvspserver服务是否已经启动
#netstat -l | grep cvspserver
如果有以下内容,说明已经安装成功并正常启动
tcp 0 0 *:cvspserver *:* LISTEN

二、CVS服务的用户管理
1.为Project仓库创建用户名和密码
#cd /cvs/Project/CVSROOT/
#htpasswd -m passwd superuser1
New password: 输入密码
Re-type new password: 确认密码
可根据实际情况重复以上步骤来创建其它用户,以及更改用户的密码;
这里用到的htpasswd命令是包含在apache的软件包httpd-*.rpm中的。

2.为Project仓库的用户添加身份
#su - cvsroot
#vi /cvs/Project/CVSROOT/passwd
superuser1: ******:cvssuper
superuser2: ******:cvssuper
user1:******:cvsroot
user2:******:cvsroot
这里的cvs用户和系统用户是不同的,这里假设只有默认的cvsroot和特殊权限的cvssuper两种不同的用户身份,具体可根据实际情况重复第一章节的第3个步骤添加用户,然后再在这里指定身份。

3.登录测试(假设CVS服务器IP为192.168.1.2)
#cvs -d :pserver:user1@192.168.1.2:/cvs/Project login
回车后,提示输入user1的密码,如果没有什么提示错误,说明就是成功了。

4.如果想在一个项目中设定某一个文件夹仅允许特定用户访问,可以配合chmod来实现,具体方法是,在/cvs/Project/CVSROOT/passwd中将有权限的用户身份设定为cvssuper而不是cvsroot(因为默认所有的文件都是cvsroot身份,且具有rwx权限),然后将文件夹的所有者改为cvssuper,并设定权限为700即可。

5.如果涉及到更加复杂的权限设计,例如不同子目录不同用户或组的权限区分,那么最好的也是唯一的解决方案就是弃用CVS并使用SVN,其实如果不是因为某些特殊原因必须使用CVS,都应该转到目前最优秀的SVN平台上来。

三、在SSH通道下使用CVS
SSH(Secure Shell)是一种比较安全的连接方式,如果对代码的安全性要求比较高,可以考虑在SSH通道下使用CVS。
这种方式需要客户端也同样使用Linux操作系统,然后通过创建SSH证书与服务器建立信任的方式来通过SSH通道使用CVS,存在一定的局限性。

1.配置密钥认证
在Linux客户端主机上执行以下操作
$su $HOME
$ssh-keygen -t rsa
在提示保存私钥(key)和公钥(public key)的位置时,使用默认值;
在提示是否需要私钥密码(passphrase)时,直接敲回车,即不使用私钥密码。
之后,将生成一对密钥,id_rsa(私钥文件)和id_rsa.pub(公钥文件),保存在$HOME的.ssh目录下。

将公钥添加到CVS服务器的 authorized_keys 文件中
将文件上传到CVS服务器(假设CVS服务器IP为192.168.1.2)
$scp ~/.ssh/id_rsa.pub cvsroot@192.168.1.2:/root

使用cvsroot用户登陆到CVS服务器,并将公钥添加到 authorized_keys 文件中
$cd $HOME
$mkdir .ssh
$chmod 700 .ssh
$mv ~/id_rsa.pub ~/.ssh/authorized_keys

2.访问CVS代码仓库
设置客户端环境变量如下:
#export CVS_RSH=ssh
#export CVSROOT=:ext:cvsroot@192.168.0.252:/cvs/Project
这里192.168.1.2是CVS的服务器地址,cvsroot是服务器上的用户名,具有读写源代码库的权限。

3.配置SSH通道下的pserver方式
以上方式有一个缺点,就是直接通过SSH的方式来访问CVS代码仓库,更好的方式是将二者结合,访问代码仓库用pserver方式,而传输的数据使用SSH方法加密。

登陆CVS服务器,修改/etc/xinetd.d/cvs文件如下:
#vi /etc/xinetd.d/cvs
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/cvs/Project --allow-root=/cvs/Doc pserver
log_on_failure += USERID
only_from = 127.0.0.1
bind = 127.0.0.1
}

4.修改完成之后启动CVS服务
#/etc/init.d/xinetd restart

5.在户端主机上建立SSH数据转发通道
#ssh -v -a -e none -N -o‘KeepAlive=yes’-o ‘BatchMode=yes’-L 2401:localhost:2401 cvsroot@192.168.1.2

6.设置客户端环境变量如下:
#export CVS_RSH=ssh
#export CVSROOT=:pserver:cvsroot@192.168.1.2:/cvs/Project
这里192.168.1.2是CVS的服务器地址,/cvs/Project是指定的代码仓库,cvsroot是服务器上的用户名,具有读写源代码库的权限。

7.需要注意的是,如果用到了cvssuper等其他特殊权限的用户身份,就需要重复以上步骤,将密钥添加到cvssuper用户的authorized_keys 文件中,然后在进行第5,6步骤的时候,将cvsroot用户修改为cvssuper用户。

  1. No comments yet.
(will not be published)
*