连接局域网SVN服务器失败,最直接的排查顺序是:先ping通服务器,再确认SVN服务已启动并监听正确端口,最后用正确的URL格式访问,别急着改客户端,多数问题出在网络或服务端,按下面的步骤逐层排查,基本十分钟内能定位。
局域网SVN服务器连接失败怎么解决?先检查这三个地方
连接局域网内的SVN服务器,和访问外网SVN不同,流量不出局域网,所以DNS、公网带宽这些基本不参与,用户反馈的“连不上”,绝大多数卡在三个环节:网络不通、服务没起来、地址写错,逐个验证,就能缩小范围。
怎么判断SVN服务器网络通不通
在客户端电脑上打开命令行,执行 ping 服务器IP,这里说的服务器IP是SVN所在那台机器的局域网地址,比如192.168.1.10,如果ping得通,说明物理链路没问题,网线、Wi-Fi、交换机都正常,如果ping不通,先确认两台机器是否在同一网段,例如服务器是192.168.1.x,客户端也是192.168.1.x,跨网段时检查子网掩码和网关设置。
ping通之后,再测SVN端口是否开放,默认的svn://协议使用3690端口,如果用的是http://或https://协议,端口是80或443,在客户端执行 telnet 服务器IP 3690,如果光标闪烁或提示连接成功,说明端口通;如果提示“无法打开连接”或一直超时,那就说明端口层面有拦截或服务没监听。
需要注意的是,ping只能证明主机在线,不能证明SVN服务可用,很多情况下服务器开着机,但SVN软件因为某种原因停止运行,此时ping是通的,但业务连不上。
SVN服务没启动或端口被改了
在服务器本机上打开任务管理器或服务管理工具,查看SVN相关服务状态,常见的服务名包括VisualSVN Server、Svnserve或Apache SVN,如果状态不是“正在运行”,右键启动它,或者用管理员权限执行 net start svnserve。
如果你能远程桌面到服务器,可以直接在命令行执行 netstat -ano | findstr 3690,看看返回结果里是否有 LISTENING,如果没有任何输出,说明svnserve进程根本没起来,或者监听的不是这个端口,有些运维人员会故意把SVN端口改到非标准值,比如3691、8443,此时客户端连接就必须写 svn://服务器IP:3691,少写端口就会连接失败。
行业共识认为,超过七成的局域网SVN连接问题,根因是服务端端口没监听或防火墙拦截,先解决服务端,再排查客户端,不要一上来就重装TortoiseSVN。
怎么连接局域网SVN服务器?URL格式和端口不能错
当网络和服务都正常时,客户端依然报错,那就要看URL有没有拼写问题,SVN仓库的访问URL不是随便填的,它由协议、主机、端口和仓库路径组成,任何一个地方少了或多了字符,连接都失败。
SVN地址写错导致连接失败的真实场景
局域网里最常见的SVN地址有几种写法:
- 命令行SVN服务(svnserve):
svn://192.168.1.10/repos或svn://192.168.1.10:3690/repos - Apache/HTTP方式:
http://192.168.1.10/svn/repos - VisualSVN Server:
https://192.168.1.10/svn/repos
在实际运维中,用户把协议搞混的情况非常多,明明服务器是VisualSVN搭建的,用的HTTPS协议,客户端却填了svn://,结果提示无法连接,还有的情况是仓库名大小写写错,Linux服务器上的仓库名严格区分大小写,例如Repos和repos是两个不同的路径。
URL末尾不要带多余斜杠或空格,复制地址时尤其容易带出隐藏字符,在TortoiseSVN的“版本库浏览器”里粘贴地址时,留意一下地址栏有没有前后空格。
账号密码没问题却提示认证失败
网络通了,URL也正确,但点击连接后弹出认证窗口,填写正确的用户名密码后仍然提示401或认证失败,这时要检查服务端权限配置。
- 如果是svnserve,仓库目录下的
conf/svnserve.conf文件里是否启用了anon-access = none和auth-access = write,如果authz文件里没有给该用户分配路径权限,也会认证失败。 - 如果是VisualSVN Server,在管理界面里查看用户和组是否对应到具体仓库的读写权限,新建用户后,必须将其加入拥有仓库访问权限的角色或组。
另外一类情况比较隐蔽:客户端缓存了旧密码,TortoiseSVN会在本地存储认证信息,服务器端密码被修改后,客户端仍用旧密码反复尝试,系统不会在本地弹窗提醒输入新密码,而是直接返回认证失败,解决办法是打开TortoiseSVN的“设置”->“已保存数据”,点击“清除全部认证数据”,下次连接时会重新要求输入密码。
SVN服务器连接失败?可能是防火墙偷偷拦住了你的请求
防火墙是局域网SVN连接失败的重灾区,尤其是Windows服务器上自带的防火墙,默认拦截所有入站连接,你的SVN服务明明已经运行,端口也在监听,但客户端就是连不上。
Windows防火墙放行SVN端口的实操步骤
以Windows Server 2016/2019为例,放行3690端口的具体操作:
- 打开控制面板 -> Windows Defender 防火墙 -> 点击左侧“高级设置”。
- 在左侧选择“入站规则”,点击右侧“新建规则”。
- 规则类型选择“端口”,下一步后选择“TCP”,特定本地端口填写
3690。 - 操作选择“允许连接”,配置文件保持勾选域、专用和公用。
- 命名规则为
SVN 3690,点击完成。
如果你使用的是HTTP或HTTPS协议,则放行80或443端口,对于用svn://协议的情况,只放行3690就可以了。
如果你不想走图形界面,也可以在命令行执行:
netsh advfirewall firewall add rule name="SVN Port" dir=in action=allow protocol=TCP localport=3690
执行后提示“确定”,防火墙规则立即生效,这一招在批量部署时尤其方便。
公司路由器或云主机安全组限制
即便服务器本机防火墙放行了,局域网里还有三层交换机和路由器,有些公司内网开启了端口隔离或ACL策略,禁止不同部门之间的机器互访,如果你和服务器不在同一个VLAN,即使ping得通(因为某些设备允许ICMP),或者ping都不通,就可能被访问控制策略卡住。
此时可以询问网管,确认VLAN之间是否允许TCP 3690或443端口通行,如果是虚拟机,也要检查宿主机(比如VMware或Hyper-V)的网络模式,如果把服务器网络设置为NAT或者仅主机模式,外网客户端自然连不上,用桥接模式并分配局域网独立IP,才能被正常访问。
局域网SVN连不上?代理设置和客户端缓存也要排查
排除掉服务端和网络因素之后,剩下的问题通常在客户端本身,一个容易被忽视的原因是代理设置,TortoiseSVN默认使用系统代理设置,如果你所在的办公网络要求通过代理访问互联网,而这个代理又无法解析公司内网的IP地址,那么连接就会超时。
TortoiseSVN连接服务器失败但浏览器能打开仓库
这种情况下,浏览器访问相同地址或许能正常显示(因为浏览器走了绕过代理的例外规则),但TortoiseSVN却卡住了,解决办法:
- 右键项目文件夹 -> TortoiseSVN -> 设置。
- 在左侧选择“网络”选项卡。
- 将“代理服务器”设置从“使用系统代理”改为“不使用代理”,或者手动把服务器IP加入“例外地址列表”。
- 确认后重新尝试连接仓库。
在某些公司里,代理服务器还会自动检测网络请求,如果它检测到SVN协议(svn://)不是常见HTTP流量,可能直接丢弃连接,所以对于局域网内的SVN,完全禁用代理是最稳妥的做法,据统计,这类问题在大型企业网络中出现频率相当高,尤其是在安装了统一上网行为管理软件的环境中。
客户端缓存旧密码和存储的认证信息版本不对
另外一个经常导致“之前能用,突然不能用了”的原因,是本地缓存的认证凭据过期或冲突,TortoiseSVN将认证信息保存在以下目录:
C:\Users\<用户名>\AppData\Subversion\auth\
如果你更换过服务器端的用户权限,或者用户密码被重置,客户端保存的旧凭据依然存在,并且优先级高于新输入的账号信息,这时连接会直接报错,甚至不会弹出登录框。
处理方式很简单:打开TortoiseSVN的设置,找到“已保存数据”,点击“清除全部认证数据”按钮,或者手动删除AppData\Subversion\auth文件夹下的所有文件,删除后重新访问仓库,客户端会强制要求输入账密,填上最新正确的信息即可,业内专家指出,清理本地认证信息是解决SVN连接失败最快速有效的一招,常常被排障员最后才想到。
如果上述所有步骤都检查完,连接仍然失败,可以尝试换一台电脑或手机客户端测试,排除是客户端软件版本太旧或损坏的问题,TortoiseSVN老版本可能不兼容新服务器端的某些加密协议,比如TLS 1.2或TLS 1.3,把客户端升级到最新稳定版,或者降级服务器端的加密算法,很多疑难问题就迎刃而解。
局域网SVN服务器连接失败怎么解决?常见问题汇总
Q1: 局域网内SVN服务器开着,但我用svn://连接提示“无法连接主机”,为什么?
先确认本地是否ping通服务器IP,如果ping通,再检查服务器上3690端口是否在监听,方法是在服务器上执行netstat -ano | findstr 3690,如果端口未监听,启动svnserve服务,如果端口已监听,客户端依然无法连接,那就是防火墙或路由策略问题,按上文方法放行端口。
Q2: 同在一个公司,别的电脑能连上SVN,我这台连不上,怎么解决?
先对比两台电脑的网络参数,确认是否在同一个VLAN或网段,然后在这台无法连接的电脑上关闭所有代理,并清除TortoiseSVN已有的认证数据,若仍不行,检查这台电脑上是否有安全软件(如360、火绒)拦截了3690端口,临时退出安全软件再测试,这个场景中,较大比例是本地软件拦截。
Q3: 为什么ping得通服务器,但用TortoiseSVN连接时提示“连接超时”?
连接超时意味着TCP握手没有完成,可能是路由器ACL封锁了端口,或者服务器的入站防火墙没有允许3690端口,另外一种可能是服务器上的svnserve进程阻塞,或者同一时间连接数过多,最简单的方法是在客户端执行telnet 服务器IP 3690,如果telnet也超时,说明端口层面不通,需要检查网络设备,如果telnet是通的但TortoiseSVN超时,则重点检查代理设置,禁用代理后重试。
SVN连接失败本质上就是一条链路的问题,从客户端网络栈到服务器进程,一层层剥开,问题总能暴露,按网络、服务、地址、防火墙、代理的顺序走一遍,绝大多数情况都能当场解决,不要反复重装客户端,那不是在排障,而是在赌运气。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/774542.html


