You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSH隧道搭建后RealVNC连接失败,报错“No route to host”求助

SSH隧道VNC连接失败:channel 3: open failed: connect failed: No route to host

问题描述

我使用以下SSH命令建立隧道以访问远程服务器的VNC服务:

ssh -g -L5912:server:5912 user@host

登录成功后,我能通过命令行正常访问目标服务器的文件,但用RealVNC Viewer连接localhost:12时,客户端提示:

The connection closed unexpectedly.

同时原命令行终端弹出错误:

channel 3: open failed: connect failed: No route to host

我试过更换端口,也查过相关报错帖子,但对SSH隧道不太熟悉,没法解决这个问题,恳请大家帮忙!


排查与解决步骤

让我们一步步拆解问题,从最容易忽略的细节入手:

1. 先检查端口号是否匹配!

你SSH隧道绑定的本地端口是5912,但你尝试连接的是localhost:12——这明显不对应啊!RealVNC应该连接localhost:5912才对。这大概率是导致错误的直接原因,先修正这个连接地址试试。

2. 确认隧道目标地址的可达性

SSH命令里的server:5912,指的是你登录的host服务器能访问到的目标VNC服务器的地址和端口。这里需要确认两个点:

  • 如果你写的server是另一台机器的主机名/IP,先在host服务器上执行telnet server 5912,看看能不能连通。如果连不通,说明host到server的5912端口没有路由,可能是server的防火墙拦截了,或者server的地址写错了。
  • 如果你的目标VNC服务就在host本机上,那应该把隧道目标写成localhost:5912,修改后的SSH命令是:
    ssh -g -L5912:localhost:5912 user@host
    

3. 检查目标VNC服务的状态

在目标server上,执行以下命令确认VNC服务是否在监听5912端口:

netstat -tulpn | grep :5912

如果没有任何输出,说明VNC服务要么没启动,要么监听的不是5912端口。你需要调整VNC的配置,或者把SSH隧道的目标端口改成VNC实际监听的端口。

4. 去掉不必要的-g参数

-g参数的作用是允许其他主机连接你的本地隧道端口,但如果你只是自己本机用RealVNC连接,这个参数完全没必要,反而可能带来权限问题。试试去掉它:

ssh -L5912:server:5912 user@host

5. 检查本地端口是否被占用

虽然你说换过端口,但还是可以确认下本地5912端口有没有被其他程序占用:

  • Windows系统:打开命令提示符,执行netstat -ano | findstr :5912
  • Linux/macOS系统:执行lsof -i :5912或netstat -tulpn | grep :5912
    如果发现端口被占用,换一个未被使用的端口(比如5901),同时修改SSH命令和RealVNC的连接地址。

6. 排查目标服务器的防火墙规则

如果host能ping通server但连不上5912端口,那大概率是server的防火墙或者安全组拦截了来自host的请求。你需要在server上添加规则,允许host的IP访问5912端口。


内容的提问来源于stack exchange,提问作者Vicente Esnaola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:02:52