svn和svn + ssh的颠覆path差异

[02:48] [root @ server:〜] ps ax | grep svn 23986? Ss 0:00 / usr / bin / svnserve -d -r / srv / svn正如你从参数中看到的,我的svn根目录是/ srv / svn。

现在,来自远程机器的一些魔法…

这工作:

> svn co svn://[email protected]/test-repo 

但是这不是:

 > svn co svn+ssh://svn-user@<putty-session-name>/test-repo 'No repository found in 'svn+ssh://svn-user@<putty-session-name>/test-repo' 

打了几个小时,我发现,如果我使用SSH隧道,我可以得到我的回购使用以下:

 > svn co svn+ssh://svn-user@<putty-session-name>/srv/svn/test-repo 

这意味着我应该指定回购的完整物理path。 咦?

正如womble所说,事实上,这是svn over ssh的“特征”。

我有svn + ssh工作,没有指定完整path的存储库,因为svn服务器有一个svnserve包装脚本来代替原来的svnserve二进制。 之后,在颠覆更新期间,这个脚本被原始二进制覆盖。

解:

  1. 将svnserve重命名为bin

     mv /usr/bin/svnserve /usr/bin/svnserve.bin 
  2. 将此脚本保存为/ usr / bin / svnserve:

     #!/bin/sh exec /usr/bin/svnserve.bin -r /srv/svn "$@" 
  3. 更新权限

     chmod 755 /usr/bin/svnserve 

这是因为SSH( svn+ssh:// )上的svn+ssh://只是使用SSH作为传输方式访问Subversion版本库“本地”,因此您可以访问整个文件系统。 相反,Svnserve被告知“用/srv/svn开始你的path,所以你不必手动指定它。

你可以通过编辑subversion用户的〜/ .ssh / authorized_keys来编辑使用svn + ssh的用户的ssh login命令。 用户的行如下所示:

 command="/usr/bin/svnserve -r /srv/svn [other svnserve options]" <key type> <user key> <key comment> 

svn书中有更多的svn + ssh技巧

这更像是一个问题本身,但它确实与这个问题有关。

设置svn + SSH与私有/公钥我不能访问我的回购使用相对path以这种方式:

 svn co svn+ssh://svn@SERVERIP/simple-webapp-svn simple-webapp-svn 

因为我得到这个错误:

 svn: URL 'svn+ssh://svn@SERVERIP/simple-webapp-svn' doesn't exist 

但只有这样:

 svn co svn+ssh://svn@SERVERIP/home/svn/projects/simple-webapp-svn simple-webapp-svn 

这是我在/home/svn/.ssh目录下的authorized_keys2文件

 $ sudo cat /home/svn/.ssh/authorized_keys2 command="/usr/bin/svnserve.bin -t --tunnel-user=USERNAME",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa [rsa-key] [user-note] 

以及Andrejs在之前的回答中提出的svnserve.bin文件

 $ cat /usr/bin/svnserve.bin #!/bin/sh exec /usr/bin/svnserve -r /home/svn/projects "$@" 

我甚至想过在这里列出的权限问题:

 -rwxr-xr-x 1 root root 63684 2009-12-12 06:45 /usr/bin/svnserve -rwxr-xr-x 1 root root 61 2010-08-25 17:19 /usr/bin/svnserve.bin 

我真的不能想出一个解决scheme…