当前位置: > Linux服务器 > SVN >

SSH连接svnserve的方法

时间:2014-09-15 03:17来源:linux.it.net.cn 作者:it

在svnserve入门一文中, 介绍了svnserve的配置和限制未经授权的用户访问.

然而,没有加密链接到svnserve也是一个问题,如果在局域网络和可信任的网络是可以的,但是使用不信任的网络,如互联网链接,就得要用ssh以确保数据传输的安全。
ssh协议会确保一个安全的链接建立前检查安全后,再把数据提交到subversion repository。
在这里已经默认为ssh已经完成安装和配置了。

SSH检出
使用ssh检出的语法和上一篇文章介绍的十分相似,所以使用SSH协议检查project1是这样的:
 

复制代码代码示例:
svn co svn+ssh://192.168.1.118/home/demo/repository/project1/trunk project1

与上一篇文章的例子的区别是:
svn变成svn+ssh
注意,存储仓库的绝对路径../home/demo/repository/project1/trunk..

端口错误
如果执行以上命令,出现以下错误,从错误的信息可以看出来是ssh端口错误,因为我自定义了ssh的访问端口为30000。
 

复制代码代码示例:
svn co svn+ssh://192.168.1.118/home/demo/repository/project1/trunk project1
ssh: connect to host 192.168.1.118 port 22: Connection refused
 

如果使用默认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:
 

复制代码代码示例:
svn co svn+project1ssh://192.168.1.118/home/demo/repository/project1/trunk project1
 

这次,输出结果如下:
A    project1/hello.txt
A    project1/goodbye
Checked out revision 4.
ssh检出project1/trunk成功!并把它放在本地的Project1文件夹。

svnserve
使用SSH协议访问你的版本库意味着你可以把svnserve关闭,阻止端口3690(这是很好的习惯,阻止没用的端口,停止不必要的服务)。
可以关闭svnserve,是因为ssh会创建一个临时的svnserve服务。

快速查找svnserve的进程:
 

复制代码代码示例:
ps aux | grep svn
输出结果:
demo 2495  0.0  0.3  45856   940 ?   Ss  20:02  0:00 svnserve -d -r repository/
demo 2501  0.0  0.2  3936    724 pts/0   S+     20:02   0:00 grep --color=auto svn

注意:svnserve的进程(pid)是2495,kill既可以。
 

复制代码代码示例:
sudo kill 2495

检查svnserve是否被杀,重复ps aux 命令即可以。
 

复制代码代码示例:
iptables

现在现在是通过配置iptables阻止端口3690,打开iptables的测试文件:
 

复制代码代码示例:

sudo vim /etc/iptables.test.rules

输入
# Allows svnserve connections from anywhere
-A INPUT -p tcp --dport 3690 -j ACCEPT

打开root的临时权限:
 

复制代码代码示例:
sudo -i

初始改变:
 

复制代码代码示例:
iptables-restore < /etc/iptables.test.rules

检查svn端口是否关闭:
 

复制代码代码示例:
iptables -L

如果端口关闭,保存iptables设置并退出root:
 

复制代码代码示例:
iptables-save > /etc/iptables.up.rules
...
exit
 
(责任编辑:IT)
------分隔线----------------------------