![两台 Windows 计算机之间通过 Linux 机器通过 SSH 进行 VNC](https://linux22.com/image/787680/%E4%B8%A4%E5%8F%B0%20Windows%20%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%B9%8B%E9%97%B4%E9%80%9A%E8%BF%87%20Linux%20%E6%9C%BA%E5%99%A8%E9%80%9A%E8%BF%87%20SSH%20%E8%BF%9B%E8%A1%8C%20VNC.png)
我感到非常困惑,试图弄清楚如何通过隧道从远程 Windows 计算机连接到 Windows 上的 VNC 服务器,该隧道连接到 VNC 服务器本地的 Linux 服务器。
我并不想在 Windows 机器上安装 SSH 客户端。由于与 Linux 机器位于同一本地网络上,因此我应该能够信任两者之间的通信。
我实际上想问的是,我是否可以创建一个 SSH 隧道,以便本地 Windows 计算机上的端口 5091 通过 VNC 目标本地的 Linux 机箱连接到另一台 Windows 计算机上的 VNC 服务器?
有人能给我指出正确的方向吗?
Windows client
|
v
<internet>
| SSH
v
Linux box (Ex IP: 192.0.2.1)
| LAN
v
Windows VNC server (Int IP: 192.168.1.1)
答案1
一般来说,你需要这样的东西:
vncviewer -via 192.0.2.1 192.168.1.1
(例如,与 Linux 中的 tigervnc 配合使用)。它会自动建立 SSH 隧道。
但你可以手工建造这条隧道。首先,你建造一条隧道:
ssh -L 5901:192.168.1.1:5900 192.0.2.1
这将与已安装的 Windows SSH 客户端功能(即 OpenSSH)配合使用。如果您使用 Putty,则可以通过会话配置 GUI 添加此隧道。这将使 SSH 客户端监听localhost:5901
。
其次,您连接到vncviewer
显示器localhost:1
,连接到此 SSH 套接字,如果目标目的地正常工作,它将通过隧道将您连接到目标服务器的 VNC。目标将看到您从 192.0.2.1 的本地 IP(可能是 192.168.1.2 或类似的 IP)进行连接。
关于数字的一点解释:在 VNC 术语中,冒号后的数字表示“显示号”而不是“TCP 端口号”。它被添加到 5900,因此显示器 #1 在端口 5901 上。如果您想直接指定端口号,请使用双冒号::
。我知道,这很令人困惑,而且一些 VNC 客户端不使用此方案或放宽这些规则(例如,如果端口 11801 没有响应,他们会尝试 5901)。
答案2
谢谢@nikita-kipriyanov我已经知道该怎么做了:
ssh -L :5900:<windows VNC server local IP>:5900 <linux box public IP> -l <ssh user> -N