首页  ·  知识 ·  软件项目
CVS客户/服务器连接设置
网友    综合  编辑:dezai   图片来源:网络
随着互联网的普及,分布在世界各地的Linux程序员经常组成一个开发团队进行软件开发。在开发过程中,对软件的版本进行控制是一个很重要的事情。目前有很多种方法和

随着互联网的普及,分布在世界各地的Linux程序员经常组成一个开发团队进行软件开发。在开发过程中,对软件的版本进行控制是一个很重要的事情。目前有很多种方法和工具能够进行版本控制,其中CVS就是较为流行的一种。本次的经验技巧栏目有两篇CVS的文章,一篇是CVS使用之前的设置,一篇是在多人开发环境中的具体应用。希望这两篇文章能够帮助读者对CVS有进一步的了解。

CVS的使用是非常简单和方便的。从客户端访问远程CVS服务器一般有三类方法,分别是ext和server方式、pserver方式与gserver和kserver方式。用户有时在客户/服务器方式的设置上会遇到一些问题,因此在这里做一个介绍。

笔者所用系统为Red Hat 9.0。CVS和SSH均为系统自带。源代码库所在的服务器地址为192.168.0.252,具体使用时请改为自己服务器的实际地址。

pserver方式

设置服务器端

1. 以root用户登录,规划使用CVS的用户和相应的开发组。例如这里建立了一个Linux组,属于该组的两个用户sun和zhang。然后到指定的位置建立CVS的源代码库目录,赋予同组的人读写权限,将该目录属主改为Linux组下的用户sun,这样与sun同组的所有人都可以读写该目录。具体命令如下:

#cd  /usr/local   #mkdir cvsroot  #chmod 774 cvsroot  #chown sun:linux

2. 检查/etc/services文件中是否包含以下两行:

cvspserver 2401/tcp cvspserver 2401/udp

一般如果安装了CVS,系统会自动加上这两行。如果没有上面两行,一定要手动加上。这里2401是CVS默认服务的端口号。

3. 检查 /etc/xinetd.d/目录下面是否有cvspserver这个文件。它是一个文本文件,如果没有,请用文本编辑器创建该文件,并加入以下内容:

service cvspserver { disable = no socket_type = stream wait = no user = root server = /usr/bin/cvs server_args = -f --allow-root  /usr/local/cvsroot  pserver log_on_success += USERID log_on_failure += USERID }

其中server_args 是呼叫CVS时要传给CVS的参数,一定要和自己建立的源代码库位置相同。这里放在了/usr/local/cvsroot目录下面。然后使用下面的命令重新启动xinetd:
#/etc/rc.d/init.d/xinetd restart

4.CVS会在2401端口接受服务,若有防火墙请打开这个端口,检查服务是否启动。使用的命令如下:
#netstat - ln | grep 2401

如果出现类似下面一行的话,就表明服务已经启动。
tcp 0 0 0.0.0.0:2401 0.0.0.0:* LISTEN

如果没有上面代码,请检查以上步骤是否执行正确。

5.设置环境变量CVSROOT的值,并使其生效。下面是具体的设置方式:
#CVSROOT=/usr/local/cvsroot; export CVSROOT

可以把这句话加在/etc/profile中,启动时自动生效。

6.运行下面的命令初始化CVS:
#cvs init

在指定的$CVSROOT目录下就会出现CVSROOT这个目录。整个源代码库只需要运行一次初始化即可。运行初始化命令不一定是root用户,也可以是Linux组中的普通用户。

到此为止服务器基本设置成功,可以设置客户端了。

客户端设置
以用户sun登录,假设已经安装好CVS软件,可以直接测试,命令如下:
#cvs -d“:pserver:sun@192.168.0.252:/usr/local/cvsroot”login

出现询问密码表示基本成功。这里pserver是连接方式;192.168.0.252是CVS服务器所在的IP地址,如果是同一台机器替换为localhost即可;sun是服务器上的普通Linux用户;/usr/local/cvsroot是服务器上源代码库所在的目录。输入密码后,若正确则没有任何提示,就可以使用CVS了。密码只需要login时输入一次。第一次使用CVS源代码库时,应该先import项目,再checkout。为了避免每次执行命令输入的麻烦,可以设置环境变量CVSROOT。
#CVSROOT=:pserver:sun@192.168.0.252:/usr/local/cvsroot ;export CVSROOT

这样就可以直接使用CVS命令了,使用完之后最好执行“cvs logout”退出。

高级设置

1.为了避免他人通过CVS来猜测系统账号密码,可以将CVS账号和系统账号分开使用。

在CVS服务器端编辑/usr/local/cvsroot/CVSROOT/passwd文件(该文件安装时并不存在),格式为CVS账号:密码:系统账号,例如:
#cvsuser:xcgaer5321dsa: sun

cvsuser为仅仅使用CVS的账号(系统账号中可以没有这个账号);xcgaer5321dsa是登录时的密码,该密码可以通过建立临时系统用户让系统生成,然后从/etc/shadow中获得,再将临时用户删除;sun是cvsuser登录后映射到系统sun这个账号的权限。

2.编辑/usr/local/cvsroot/CVSROOT/readers。该文件内所有账号都只有只读权限,格式为每行一个账号。

3.编辑/usr/local/cvsroot/CVSROOT/writers。该文件内的账号有读写的权限,格式同readers。

SSH方式

SSH(Secure Shell)是一种比较安全的连接方式。程序开发人员一般使用SSH连接到服务器上,对程序进行修改。目前SSH有SSH1和SSH2两个版本。Linux下面安装的是OpenSSH。它兼容SSH的两个版本。

首先查看是否已经安装了OpenSSH,命令如下:
# rpm -qa | grep ssh

如果出现类似下面的提示,说明已经安装了OpenSSH软件;如果没有,请自行安装:

openssh-3.5p1-6 openssh-server-3.5p1-6 openssh-clients-3.5p1-6 openssh-askpass-gnome-3.5p1-6 openssh-askpass-3.5p1-6

服务器端还需要运行服务监护程序sshd。先通过下面的命令来检查sshd是否已经运行:
# ps -ax | grep sshd

如果运行上面的命令时出现提示如下,那么表示已经运行了sshd:

1615 ?        S      0:00 /usr/sbin/sshd 21484 pts/1    S      0:00 grep sshd

如果没有,请运行下面的命令启动sshd:
#/etc/rc.d/init.d/sshd start

基于传统口令认证

缺省情况下,SSH仍然使用传统的口令验证。在使用这种认证方式时,用户不需要进行任何配置,使用自己在远程服务器上的账号和口令登录。所有传输的数据都会被加密,但是不能保证正在连接的服务器就是用户想要连接的服务器。使用以下语法登录服务器:
ssh -l [在远程服务器上的账号] [远程服务器的主机名或ip地址]

假设在服务器上有账号sun,执行以下命令:
#ssh -l sun 192.168.0.252

在第一次登录服务器时,如果一切正常的话,总会出现下面的提示,以后再登录时,系统就不会再提示这样的信息了:

The authenticity of host '192.168.0.252' can't be established.  Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.  Are you sure you want to continue connecting (yes/no)?

输入“yes”并回车后,系统会提示输入密码。输入密码后,用户就可以像平常使用Telnet那样来使用SSH了。这里提醒一下,对于习惯使用Windows的用户一定要输入完整的“yes”或“no”,否则无法登录。

基于密钥认证

首先创建一对密钥(包括公共密钥和私人密钥,用公共密钥加密的数据只能用私人密钥解密),并把公共密钥放到需要的远程服务器上。这样当登录远程服务器时,客户端软件就会向服务器发出请求,请求用用户的密钥进行认证。服务器收到请求之后,先在用户的宿主目录下寻找公共密钥,然后检查该公共密钥是否是合法。如果合法就用公共密钥加密一随机数,并发送给客户端软件。客户端软件收到之后就用私匙解密再把它发送给服务器。因为用公共密钥加密的数据只能用私人密钥解密,服务器经过比较就可以知道该客户连接的合法性。

下面就一步步来配置基于密钥认证的OpenSSH(基于SSH2):

1.配置远程服务器
安装完成后一般说来就没有必要修改服务端的配置文件了。但是如果以后想要获得最大化的安全性,可以把服务器上的/etc/ssh/sshd_config文件中的“PasswordAuthentication yes”改为“PasswordAuthentication no”,即只能使用密钥认证的OpenSSH,禁止使用口令认证。

2.配置客户端
对客户端配置文件/etc/ssh/ssh_config不需要进行任何更改。

3.在客户端生成密钥
先在客户端用“ssh-keygen”命令生成密钥。因为这里使用的是SSH2,用sun登录客户工作站,然后执行命令如下:

#cd $HOME #ssh-keygen -t rsa(dsa)

系统将显示一些信息,需要用户输入密钥文件的保存路径,回车使用缺省路径。然后输入密钥的保护口令(passphrase),就会生成公共密钥文件和私人密钥文件。公共密钥文件是/home/sun/.ssh/id_rsa.pubid(老版本会生成entity.pub)。

4.发布公共密钥
将公共密钥文件拷贝到服务器上,按照提示输入密码,拷贝成功。命令如下:
#scp .ssh/id_rsa.pub sun@192.168.0.252:~/.ssh

也可以通过E-mail和SFTP等方法发布,只要把这个公共密钥文件复制到相应目录即可。在服务器上以sun登录,执行下面的命令:

#server$ cd .ssh;没有请建立该目录 #server$ cat id_rsa.pub >> authorized_keys;追加到文件后面即可。

现在就可以从客户端直接连接到服务器了。

5.访问CVS源代码库
服务器端不再进行其它的设置,只需要安装了SSH和CVS,并且sshd已经运行。客户端设置命令如下:

#export CVS_RSH=ssh #export CVSROOT=:ext:sun@192.168.0.252:/usr/local/cvsroot

这里192.168.0.252是CVS源代码库所在的服务器地址,sun是服务器上的用户名,要有读写源代码库的权限。

SSH通道下pserver方式

还可以用上述两种方法的结合方式访问CVS源代码库。访问源代码库用pserver方式,而传输的数据使用SSH方法加密。

服务器端
服务器按照pserver方式设置,不过/etc/xinetd.d/cvspserver文件要改成下面这样:

service cvspserver { flags = REUSE socket_type = stream wait = no user = root server = /usr/bin/cvs server_args = -f --allow-root=/usr/local/cvsroot pserver passenv = log_on_failure += USERID only_from = 127.0.0.1                 指向本机 bind = 127.0.0.1 }

改完之后重新启动xinetd。

客户端
客户端需要使用DSA算法生成私人密钥和公共密钥,命令格式为“ssh-keygen -d”,生成的文件包含“~ /.ssh/id_dsa.pub”。用户把它用任何方式发送到服务器端,追加到任何一个用户的主目录的后面(例如zhang用户,则是/home/zhang/.ssh/authorized_keys2)。然后客户端和服务器端要通过这个用户建立安全通道。在客户端键入如下命令:
#ssh -v -a -e none -N -o‘KeepAlive=yes’-o ‘BatchMode=yes’-L 2401:localhost:2401 zhang@192.168.0.252

其中,端口2401是本地的pserver服务端口,zhang是服务器上的任一个用户,可以不是参与开发的用户,有没有读写源代码库的权限无所谓,他只是负责建立SSH通道。通道建立之后如果处于阻塞状态,可以按下“Ctrl+C”结束连接。在另外一个窗口中使用CVS,就像源代码库在本地一样。其原理就是在客户机与服务器之间建立了一条SSH的通道,使源代码库看起来像在自己机器上一样。环境变量设置成下面这样:
#export=‘CVSROOT=:pserver:sun@192.168.0.252:/usr/local/cvsroot’

其中sun是服务器上的CVS用户名,/usr/local/cvsroot是服务器上的源代码库位置。

小结

CVS是一个使用广泛的版本控制系统,使用起来比较方便,只是使用之前的设置比较麻烦。这里主要讲述了几种常用连接方式的设置方法,以供参考。(T111)

本文作者:网友 来源:网络
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读