今天配置了通过ssh提供的cvs服务:
安装了sshd后,创建使用cvs的帐户。不过这些帐户的开通使得cvs的用户可以通过ssh登录到cvs服务器上执行命令。为了限制cvs用户只能通过ssh使用cvs功能,我用Google找到了两个方法。
方法一:关闭ssh的密码认证功能,让ssh服务必须通过密钥(证书)认证,并在服务器上的认证证书文件的证书前加上command选项限制ssh登录后的执行命令。这个方法不太好,用户通过ssh连接到服务器后,就进入cvs的服务命令状态,没有任何提示。
方法二:建立一个脚本作为用户登录后的shell,脚本的内容为判定执行的命令,如果是cvs命令则执行,否则显示提示信息后退出。我选择了这个方法,建立了下面的脚本文件(文件名为cvsonly):
#!/bin/sh
if [ "$*" != "-c cvs server" ]; then
echo "CVS Only!";
exit;
fi;
cvs server
脚本存放在/usr/local/bin下,通过chmod 755加上执行权限。
然后在/etc/passwd中将只允许使用ssh访问cvs的用户的shell替换成上面的脚本即可。
在cygwin上也可以用类似的方式进行配置。(实际上我就是在cygwin环境下这样配置的,Linux上反而还没有试验。)
另外,为了更加安全可以在上面的脚本的最后一行cvs server后加参数--allow-root,防止cvs访问cvsroot之外的文件系统。