TortiseSVN svn+ssh 错误:无法连接到 URL 上的存储库...网络连接意外关闭
Posted
技术标签:
【中文标题】TortiseSVN svn+ssh 错误:无法连接到 URL 上的存储库...网络连接意外关闭【英文标题】:TortiseSVN svn+ssh Error: Unable to connect to a repository at URL ... Network connection closed unexpectedly 【发布时间】:2012-09-18 09:17:33 【问题描述】:我在使用 TortoiseSVN 1.7.8 访问 SVN 存储库时遇到问题。
SVN 存储库位于带有openssh 5.3p1:81.el6
的 CentOS 6.3 机器上,并且似乎运行正常。
# svnadmin --version
# svnadmin, version 1.6.11 (r934486)
我可以使用以下命令从另一个 CentOS 机器访问存储库:
svn list svn+ssh://USER@xxx.xx.xx.xxx/var/svn/joetest
但是当我尝试从 Win 7 工作站使用 TortiseSVN 浏览存储库时,我无法使用以下路径:
svn+ssh://USER@xxx.xx.xx.xxx/var/svn/joetest
我从 TortoiseSVN 收到以下错误:
无法通过 URL 连接到存储库 'svn+ssh://USER@xxx.xx.xx.xxx/var/svn/joetest' 更好的调试SSH 连接问题,从 [tunnels] 中的 'ssh' 中删除 -q 选项 Subversion 配置文件的部分。网络连接 意外关闭
我可以使用 Putty 从工作站通过 SSH 登录。
如果我尝试以 root 身份访问,结果是相同的。
我已将存储库/var/svn/
的所有权授予USER:USER
并运行chmod 2700 -R /var/svn/
。
因为我可以从另一个 Linux 机器通过 ssh 访问存储库,所以权限似乎不是问题。
当我使用tail -fn 2000 /var/log/secure
查看日志文件时,每次 TortiseSVN 要求输入密码时,我都会看到以下内容:
Sep 26 17:34:31 dev sshd[30361]: Accepted password for USER from xx.xxx.xx.xxx port 59101 ssh2
Sep 26 17:34:31 dev sshd[30361]: pam_unix(sshd:session): session opened for user USER by (uid=0)
Sep 26 17:34:31 dev sshd[30361]: pam_unix(sshd:session): session closed for user USER
我实际上可以登录,但会话随即关闭。
我注意到会话正在由 root (uid=0)
为 USER 打开,这可能是正确的,但我会提到它以防与问题有关。
我研究过修改svnserve.conf
,但据我所知,通过svn+ssh
访问存储库时没有使用它,通过此方法为每次登录创建一个私有svnserve 实例。来自手册:
还有第三种调用 svnserve 的方法,那就是在“隧道”中 模式”,带有 -t 选项。此模式假定远程服务 RSH 或 SSH 等程序已成功验证用户身份,并且 现在正在以该用户身份调用私有 svnserve 进程。服务端 程序运行正常(通过标准输入和标准输出进行通信),并且 假设流量被自动重定向到某些 某种隧道回到客户端。当 svnserve 被一个 像这样的隧道代理,请确保经过身份验证的用户具有完整的 对存储库数据库文件的读取和写入访问权限。 (见服务器 和权限:警告。)它基本上与 本地用户通过 file:/// URL 访问存储库。
sshd_config
中唯一的非默认设置是:
Protocol 2 # to disable Protocol 1
SyslogFacility AUTHPRIV
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
X11Forwarding no
Subsystem sftp /usr/libexec/openssh/sftp-server
有什么想法吗?
【问题讨论】:
只是一个想法,尝试将 USER@ 从 URL 中取出并等待乌龟提示输入凭据。不确定它是否会起作用,但值得一试。 感谢您的建议,但结果相同。 打开tortoise repo-browser,出现什么错误? 我在问题顶部附近添加了错误消息。 您可以使用相同的凭据进行 ssh 操作吗? 【参考方案1】:我终于找到了解决方案。在各地的TortoiseSVN FAQ中:TortoiseSVN Frequently asked questions
来自常见问题解答:SVN+SSH: Connection closed unexpectedly
有报道说svn+ssh的连接形式 svn+ssh://username@server.com 以前工作的,停止 使用 TortoiseSVN 1.5。这似乎与plink有关,并且 如果您在 PuTTY 中设置了默认主机名,则会发生这种情况。
如果是这种情况,您可以使用 regedit 或 regedt32 来修复它 清除 HKEY_CURRENT_USER/Software/SimonTatham/Putty/Sessions/Default%20Settings/HostName。
另一位用户报告了以下服务器端修复:
ssh 进入您的帐户 cd ~ cp /etc/bashrc .bashrc 纳米.bashrc 在 "mesg y" 行前加一个 # (将其输出) Ctrl+X 退出,提示保存时按 Y。
我没有尝试第一种编辑注册表的方法。
编辑 bash 配置的第二种方法对我有用。
关于bash配置方法的说明:
如果您使用共享主机,您的用户 .bashrc 文件可能会加载全局 /etc/bashrc 文件。您将无法编辑全局文件,因此您需要解决这个问题。
一些可能的方法:
尝试将mesg n
添加到您的用户 .bashrc 文件中。我不确定这是否
会起作用还是应该放在全局之前还是之后
文件已加载。
不要包含全局文件和硬编码您的所有设置
用户.bashrc
文件。
从全局 /etc/bashrc 文件中删除 mesg y
设置
加载。这个问题讨论了如何做到这一点:Use a grepped file
as an included source in bash
【讨论】:
我正在尝试做同样的事情,但我收到了与您在上面发布的相同的错误消息。但是,我可以使用 gui 连接到我的 repo 并使用 svn+ssh://user@ip/repo 浏览它,但它不允许我通过命令行执行此操作。你有没有用命令行来做这件事? @nkon 这是一个小项目,我无法再访问该服务器,因此无法对其进行测试。我建议您提出一个问题,并包括有关有效和无效命令的所有详细信息以及日志条目以及您对 SVN、SSH 和 BASH 的配置(类似于我在问答中包含的内容)。这将为某人提供最好的机会来了解可能导致问题的原因。创建问题后在此处添加评论,我会看一下。【参考方案2】:一个老问题,但在谷歌上仍然是最重要的,所以我想我会分享我的解决方案。
很简单,这是因为我在服务器上没有我的用户的“主”目录。将 SSH 客户端更改为 Putty 附带的 plink.exe(右键单击文件夹 | TortoiseSVN | 设置 | 网络)让我看到屏幕上出现的错误。
【讨论】:
【参考方案3】:在我的情况下,原因是 svnuser 没有 shell(它是 /bin/false)。 即使使用 debug ssh -vvv,这在 ssh 日志中也不可见。
当您遇到此类问题时,您的调试输出将如下所示
debug1: Entering interactive session.
debug1: Remote: Forced command.
debug1: Remote: Port forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Remote: Forced command.
debug1: Remote: Port forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Sending environment.
debug1: Sending env LANG = en_GB.UTF-8
debug1: Sending command: svnserve -t
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
debug1: channel 0: free: client-session, nchannels 1
当 shell 设置为 /bin/bash 时,日志变为
debug1: Sending env LANG = en_GB.UTF-8
debug1: Sending command: svnserve -t
Path: MyRepo
URL: svn+ssh://svnuser@myServer.com/MyRepo
【讨论】:
【参考方案4】:我遇到了同样的问题,我尝试了 regedit 解决方案。
在我的情况下,默认主机名不是罪魁祸首,但注册表在保存的会话名称中显示了一个空格 (%20)。
当您从那里打开连接时,Putty 不关心会话名称,因此从 Putty 连接时没有错误。 但是会话名称在您的 svn+ssh:// url 中很重要!
在我的例子中,Putty 会话名称是“server”,当我执行 svn checkout 时,我使用了“svn+ssh://server/srv/svn/repo”,因此出现了错误。
【讨论】:
【参考方案5】:我在将旧的 svn 存储库移动到新的 Ubuntu 20.04 服务器并尝试从 Windows(使用 tortoisesvn)签出存储库时遇到了这个问题。我终于意识到新服务器上没有安装 svn,它需要为存储库提供服务。对我来说简单的解决方法是:
sudo apt install subversion
【讨论】:
【参考方案6】:TL;DL:将密钥添加到PageAnt
首先测试您的 Putty 配置是否正常 - 您可以通过 Putty 使用密钥进行连接,您会看到如下内容:
使用用户名“svn”。 使用公钥“imported-openssh-key”进行身份验证 服务器拒绝分配 pty (成功(2 2()(编辑管道 svndiff1 缺席条目提交-revprops 深度日志-revprops atomic-revprops 部分重播继承-props ephemeral-txnprops 文件-revs-reverse)))
然后启动PageAnt(它与PuTTY和PuTTYgen在同一个安装包中),你必须在那里添加你的密钥。
就我而言,它解决了问题。在某些情况下,无需配置 PageAnt 即可正常工作,但在某些情况下却不行,尽管似乎所有选项都以相同的方式设置。
【讨论】:
【参考方案7】:也许这个简单的解决方案会奏效:
转到您的腻子并检查保存的会话名称是否与您尝试结帐的名称(腻子中保存的 svn 会话名称)匹配...
E.G.:在svn保存的会话中,名称保存为coreSvn
,结帐url为:
svn+ssh://svnuser@core/COCRETE/branches/R20181121-0.0.2-RELEASE
,这行不通。将@core
更改为@coreSvn
或@coresvn
【讨论】:
以上是关于TortiseSVN svn+ssh 错误:无法连接到 URL 上的存储库...网络连接意外关闭的主要内容,如果未能解决你的问题,请参考以下文章
SVN+SSH,不用每次都做 ssh-add 吗? (苹果系统)