如何借助云实例通过反向SSH实现工作机与本地机的VNC桌面共享?
如何借助云实例通过反向SSH实现工作机与本地机的VNC桌面共享?
我来帮你梳理下当前的问题并给出可行的解决方案,你遇到的核心问题是VNC服务的监听范围限制和端口转发链路没完全打通,咱们一步步来调整:
第一步:修改工作机的VNC配置,解除本地监听限制
你当前的~/.vnc/config里有localhost这一行,这会让VNC服务只接受工作机本地的连接请求,反向SSH过来的隧道连接会被直接拒绝。
- 编辑VNC配置文件:
nano ~/.vnc/config - 把
localhost这一行注释掉(加#前缀)或者直接删除,修改后的配置大概是这样:session=Ubuntu geometry=1920x1080 dpi=96 # localhost - 重启VNC服务(先杀掉现有进程再重启):
vncserver -kill :2 vncserver :2
第二步:完善工作机到云实例的反向SSH隧道
你之前只转发了SSH的22端口到云实例的7000端口,现在需要把VNC服务对应的端口也一起转发过去(VNC的显示号:2对应端口5902,规则是5900 + 显示号)。
在工作机上执行这条命令建立反向隧道:
ssh -R 7000:localhost:22 -R 5902:localhost:5902 user@gcloud.instance.ip.address
-R 7000:localhost:22:把云实例的7000端口映射到工作机的22端口(用于SSH回连)-R 5902:localhost:5902:把云实例的5902端口映射到工作机的VNC服务端口(:2)
如果担心连接不稳定,可以用autossh来自动重连(先在工作机安装autossh:sudo apt install autossh):
autossh -M 20000 -R 7000:localhost:22 -R 5902:localhost:5902 user@gcloud.instance.ip.address
-M 20000是用于监控连接状态的端口,只要这个端口能正常通信,autossh就会自动维持隧道。
第三步:从本地机建立到云实例的端口转发
现在云实例的5902端口已经对应工作机的VNC服务了,你需要从本地机把这个端口转发到自己的本地环境:
在本地机上执行:
ssh -L 5902:localhost:5902 user@gcloud.instance.ip.address
这条命令会把本地机的5902端口映射到云实例的5902端口,也就是最终指向工作机的VNC服务。
第四步:连接VNC桌面
打开你本地的VNC Viewer(Remmina或者TigerVNC都可以),直接连接:
localhost:5902
或者用显示号的写法:
localhost:2
输入你工作机VNC服务的密码,就能正常访问工作机的桌面了。
额外说明
- 云实例完全不需要安装桌面环境,所有转发都是通过SSH隧道完成的,保持云实例只运行SSH服务更轻量、更安全。
- 如果你之前在云实例的桌面里尝试连接
localhost:2,那其实是在连云实例自己的VNC服务,不是工作机的,所以会黑屏,按照上面的步骤走就没问题了。
备注:内容来源于stack exchange,提问作者Michele Valotti
相关产品推荐
相关产品推荐

