在svnserve入门一文中, 介绍了svnserve的配置和限制未经授权的用户访问.
然而,没有加密链接到svnserve也是一个问题,如果在局域网络和可信任的网络是可以的,但是使用不信任的网络,如互联网链接,就得要用ssh以确保数据传输的安全。
ssh协议会确保一个安全的链接建立前检查安全后,再把数据提交到subversion repository。
在这里已经默认为ssh已经完成安装和配置了。
SSH检出
使用ssh检出的语法和上一篇文章介绍的十分相似,所以使用SSH协议检查project1是这样的:
与上一篇文章的例子的区别是:
svn变成svn+ssh
注意,存储仓库的绝对路径../home/demo/repository/project1/trunk..
端口错误
如果执行以上命令,出现以下错误,从错误的信息可以看出来是ssh端口错误,因为我自定义了ssh的访问端口为30000。
如果使用默认22端口链接ssh的(特别不推荐的使用默认端口),请阅读下一节将会通过命令行去添加用户名。
配置subversion
使用自定义ssh端口链接svnserve,需要对本地工作站的配置文件进行一些细小的修改。
linux/unit系统下本地工作站的配置文件在:
/home/USERNAME/.subversion
在windows系统下本地工作站的配置文件在:
%APPDATA%Subversion
本教程,我的工作站是linux ubuntu,所以我通过执行下面命令打开:
sudo vim ~/.subversion/config
看到的svnserve.conf文件,很多都是注释的,但是需要找到[tunnels]部分,在[tunnels]头部添加下面一行:
project1ssh = /usr/bin/ssh -p 30000 -l demo
首先,创建一个名为project1ssh,将自定义去链接project1。
然后指定ssh二进制文件的完整路径。这是一个简单的安全防范措施,要求使用放置在$PATH的二进制文件,而不是其它的。
最后,添加两个标准的选项,首先是要使用端口(30000),然后ssh用户为(demo)。
注意:如果你使用的是默认的SSH端口(22),就不要’-p 30000′。
你可以根据你的需要自定义“隧道”在不同的机器通过SSH访问不同的版本库,但是你必须是一个授权的SSH用户,以随机抽样方式是不行的。
SSH检出 (checkout)
让使用新创建project1ssh去检出project1:
这次,输出结果如下:
A project1/hello.txt
A project1/goodbye
checked out revision 4.
ssh检出project1/trunk成功!并把它放在本地的Project1文件夹。
svnserve
使用SSH协议访问你的版本库意味着你可以把svnserve关闭,阻止端口3690(这是很好的习惯,阻止没用的端口,停止不必要的服务)。
可以关闭svnserve,是因为ssh会创建一个临时的svnserve服务。
快速查找svnserve的进程:
注意:svnserve的进程(pid)是2495,kill既可以。
检查svnserve是否被杀,重复ps aux 命令即可以。
现在现在是通过配置iptables阻止端口3690,打开iptables的测试文件:
sudo vim /etc/iptables.test.rules
输入
# Allows svnserve connections from anywhere
-A INPUT -p tcp --dport 3690 -j ACCEPT
打开root的临时权限:
初始改变:
检查svn端口是否关闭:
如果端口关闭,保存iptables设置并退出root: