当我尝试结帐时:
svn checkout svn+ssh://serveradmin%foo@foo.com/home/87292/data/svn/repository/trunk .
我得到这个(无用的)错误:
svn:网络连接意外关闭
发生了什么?
这可能是由于身份验证失败而发生的。您可能已缓存的凭据与您尝试访问的站点不匹配。您可能需要在站点上注册一个 SSH 密钥。
正如下面 notallbert 所建议的,使用 SVN_SSH 标志在详细模式下获取详细错误
export SVN_SSH="ssh -v "
您可能会在 上看到类似这样的输出stderr
,
Add correct host key in /home/jcrawford/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/jcrawford/.ssh/known_hosts:4
remove with: ssh-keygen -f "/home/jcrawford/.ssh/known_hosts" -R 192.168.0.107
ECDSA host key for 192.168.0.107 has changed and you have requested strict checking.
Host key verification failed.
从文件中删除属于您的 svn 服务器 IP 地址的行条目,在我的情况下是 192.168.1.107~/.ssh/known_hosts
好的。这是我修复这个问题的方法(在 Mac OS X 上,但修复应该适用于任何客户端)
当您为 SSH 服务器使用非标准端口(例如 12001)时,会出现此特定问题。
显然,SVN 客户端在像这样的命令行上给定端口地址时会遇到语法错误:
svn list svn+ssh://username@domainname.com:12001/home/username/svn/myproject
因此,要解决此问题,您需要为 SSH 创建一个客户端配置文件,如下所示:
cd ~
cd .ssh
vi config (create a config file like the one that follows)
:w
:q
配置文件位于 ~/.ssh/config:
Host domain.com
User username
Port 12001
然后,在没有端口的情况下发出 svn+ssh 命令,如下所示:
svn list svn+ssh://username@domain.com/home/username/svn/myproject
而已!
希望有帮助。瑞克
我怀疑乔尔和安迪是对的。
您可以使用 ssh 详细标志来帮助找出这类问题。
export SVN_SSH="ssh -v "
svn checkout svn+ssh://serveradmin%foo/blah blah blah
我有同样的错误,但要进行修订。清除 .ssh/known_hosts 解决了问题,因为 SSH 密钥已过时。
我正在连接到本地网络 svn,这从某个时候发生在我身上(它实际上是定期发生的)。
我在网上找到的所有参考资料都提到了与 SSH 相关的内容。SSH 很可能也是我问题的根源,但我设法通过杀死一些 svnserve 进程来克服这个问题。
我可以这样做,因为我知道我的服务器的用途是什么,但不知道在具有更多并发性的服务器中执行此操作的相关性。
我遇到此“svn:网络连接意外关闭”错误的另一个原因是 /var is full ,这导致 svn 无法将任何内容写入磁盘。所以也许在继续上述步骤之前先检查你的磁盘空间(du -m)?
确保您的 svn url 中没有虚假冒号
它不应该是:
user@host.com:/path/to/repo
^
spurious colon should be removed
但应该是:
user@host.com/path/to/repo
就我而言,在使用 svn+ssh 时,错误源于 gforge 用户没有主目录这一事实。我手动添加了它们,问题就消失了。
检查您的防火墙设置。我在我的服务器上安装了 ConfigServer Security & Firewall (CSF),它阻止了 ssh+svn 端口 2222。我允许这些端口并能够执行更新。
如果您使用的是 Putty,它会保存您的登录凭据,因此可能会在您尝试结帐时让 tortoise 出现以下错误:连接意外关闭。如果发生这种情况,请打开 putty 并单击默认设置以加载主机名。清除主机名并保存。这对我有用...
在我的 linux 服务器上设置 ssh 后,我也遇到了这个问题。我的问题是我用 puttyGen 创建了密钥。公钥文件首先必须使用 puttyGen 从 .ppk 文件格式进行转换。在那之后,一切都像一个魅力。
ssh 尝试使用默认端口 22 进行连接时,我一直收到上述错误。为主机指定正确的端口后问题已解决。
只是将我相关的两分钱添加到旧线程中:
我将我的 svn 版本 1.10.4 (r1850624) 设置为使用 sasl
我能够使用 Windows(乌龟)和 MacOS 签出我的 repo,但是当我尝试从另一台 Debian CLI v10 机器上签出时,我会收到一对错误:
svn: E170013: 无法连接到 URL 'svn://myServer/myRepo' 的存储库
svn: E210007: 无法协商认证机制
注意:如果我在 /myRepo/conf/svnserve.conf 中注释掉“use-sasl=true”并设置“anon-access = read”,那么我可以在 Debian 服务器上结帐(所以我是尝试使用结帐有一个 sasl 身份验证问题,尽管“svnserve --version”在两台服务器上都显示“Cyrus SASL 身份验证可用。”并且两者都可以成功“sudo testsaslauthd -u myUser -p myP@5swd”和 tcp 3690 在两台服务器之间打开)
我用 --log-file /var/log/svn.log 运行 svnserve,所以在那里,我看到了(OP 的问题):
ipAddrOfServerAttemptingCheckout - - ERR - 0 210002 网络连接意外关闭
解决方案(对我而言):在尝试结帐的服务器上,我只安装了 libsasl2-modules(我只需要安装 sasl2-bin 即可让 Windows/MacOS 能够结帐):
sudo apt install libsasl2-modules
现在我可以从任何地方结帐(实际上,我现在能够“svnsync init”,这就是我意识到我遇到了身份验证问题的时候)
其他可能的原因是服务器中实际上没有安装 subversion(例如,存储库已移动到新服务器)。
嗨,我在 OS X Yosemite 上遇到了同样的问题。我阅读了所有这些答案,@notallbert 评论是解决问题的途径。似乎 OS X 无法处理 svn+ssh 方案,所以添加
export SVN_SSH="ssh "
到 /Users/username/.bashrc 是我的解决方案。
谢谢。
如果您已经设置.bashrc
为引用您的密钥,SVN_SSH
但随后sudo
用于执行svn
该命令将不会使用您的SVN_SSH
,您可能会收到此错误。
我sudo
用来签出到一个我没有创建权限的新目录,正确的方法是sudo mkdir whatever
,然后设置正确的权限以允许您写入它。