我有以下问题:我遵循了许多关于通过 svn+ssh 设置公钥访问权限的教程,该访问权限在具有 ssh-only 访问权限的 linux 机器上的 subversion 存储库中。它似乎适用于检出、更新和提交,但如果有人尝试合并或使用 ^ 运算符进行复制,它就会崩溃。
让我以示例的形式提供更多信息:svn 存储库位于机器 mymachine.myhost.com 的文件夹 /home/bob/svn/project 中,属于用户 bob(又名:me)。我为 alice 生成了一个密钥,并将以下行添加到 /home/bob/.ssh/authorized_keys:
command="/usr/bin/svnserve -t -r /home/bob/svn/project --tunnel-user=Alice",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa <alices key> alice
Alice 能够使用
svn co svn+ssh://bob@mymachine.myhost.com@
她可以提交更改和更新。但是,如果她尝试在她的机器上使用 ^ 运算符合并或执行 svn cp,如下所示:
svn cp ^/trunk/ branches/alicesbranch
服务器没有反应,过了一会儿她收到以下消息
svn: E210002: Unable to connect to a repository at URL 'svn+ssh://bob@mymachine.myhost.com/trunk/'
svn: E210002: To better debug SSH connection problems, remove the -q option from 'ssh' in the [tunnels] section of your Subversion configuration file.
svn: E210002: Network connection closed unexpectedly
经过一番研究,我放弃了,因为在大多数情况下,我只会从根本无法访问存储库的人那里得到讨论。但是在我的情况下,I/Alice确实可以访问,但不像某些 svn 操作似乎需要的那样通用。
我相信我在 svnserve 命令和 Alice 用来结帐的路径的组合上做错了,但我不知道是什么。
实际上,服务器是我没有 root 访问权限的机器。此外,网络似乎对外部访问非常屏蔽:只允许 ssh,但是一旦发生上述错误,I/Alice 就暂时无法在所述主机名上登录,可能是因为防火墙拒绝访问由于 ssh 连接失败,出于安全原因。这也是为什么我不能继续使用不同的 svnserve 命令和不同的 checkout 命令进行大量试验和错误,因为每个错误都会迫使我等到我可以进行另一次试验。
这就是为什么我希望这里有人可以帮助我。我希望我提供了足够的信息来确定问题。
真诚的, 达施姆
编辑1:这是爱丽丝会得到的svn信息
Path: .
Working Copy Root Path: /home/alice/mysvnprojects/myprojectwithbob
URL: svn+ssh://bob@mymachine.myhost.com
Relative URL: ^/
Repository Root: svn+ssh://bob@mymachine.myhost.com
Repository UUID: 8f8511ce-d5fa-11e3-abfa-cd5eac3f4aa8
Revision: 121
Node Kind: directory
Schedule: normal
Last Changed Author: Alice
Last Changed Rev: 121
Last Changed Date: 2014-08-22 15:36:56 +0200 (Fri, 22 Aug 2014)
编辑 2: 将 svnserve 命令更改为
command="/usr/bin/svnserve -t -r /home/bob/svn/ --tunnel-user=Alice"
并相应地更改 co 命令并不能解决问题。这是输出:
/home/alice/mysvnprojects/myprojectwithbob: svn co svn+ssh://bob@mymachine.myhost.co/project
[looong list of files]
Checked out revision 129.
/home/alice/mysvnprojects/myprojectwithbob: ls
project
/home/alice/mysvnprojects/myprojectwithbob: cd project/
/home/alice/mysvnprojects/myprojectwithbob: svn info
Path: .
Working Copy Root Path: /home/alice/mysvnprojects/myprojectwithbob
URL: svn+ssh://bob@mymachine.myhost.com/project
Relative URL: ^/
Repository Root: svn+ssh://bob@mymachine.myhost.com/project
Repository UUID: 8f8511ce-d5fa-11e3-abfa-cd5eac3f4aa8
Revision: 129
Node Kind: directory
Schedule: normal
Last Changed Author: Alice
Last Changed Rev: 129
Last Changed Date: 2014-09-02 12:33:56 +0200 (Tue, 02 Sep 2014)
/home/alice/mysvnprojects/myprojectwithbob: ls
branches trunk
/home/alice/mysvnprojects/myprojectwithbob: svn cp ^/trunk branches/mytestbranch
svn: E210002: Unable to connect to a repository at URL 'svn+ssh://bob@mymachine.myhost.com/project/trunk'
svn: E210002: To better debug SSH connection problems, remove the -q option from 'ssh' in the [tunnels] section of your Subversion configuration file.
svn: E210002: Network connection closed unexpectedly
如果我做
svn cp ^/trunk ^/branches/mytestbranch
相反,它似乎有效!但是,我仍然无法合并
cd trunk
svn merge ^/branches/mytestbranch .
导致已知错误。
编辑3:
似乎一切都失败了,试图访问根目录之外的任何东西。例如:
svn co svn+ssh://bob@mymachine.myhost.com@
有效,但是[假设使用“svnserve -r /home/bob/svn/project”的基本设置]
svn co svn+ssh://bob@mymachine.myhost.com/trunk
失败。这似乎是所有失败和工作案例的共同点。