客户端和服务器在 X 的世界中似乎是“倒退”的,因为您的工作站是“服务器”,提供显示设备和键盘/鼠标的服务……而您正在远程运行的程序通常是“客户端”,使用这些显示和输入设备服务。
因此,您要运行的程序需要能够“向后”连接到您的机器,但您可以暂时忘记 NAT 方面,因为这不是直接相关的。重要的是您有一种方法可以建立端到端的 SSH 连接链,这应该就是您所需要的,因为 SSH 可以完成这项工作。在回答这个问题时没有任何防火墙受到损害。
我不知道 cygwin 有什么样的 SSH 实用程序,但它大概是可比的。我首先在端到端 Linux 上测试了以下内容,然后在工作站的 Windows 7 台式机上将“ssh”替换为“\Program Files (x86)\PuTTY\putty.exe”。两种情况都按预期工作,并且论点很方便相同。
我们将 NAT 机器的主机名称为“natbox”,将数据库称为“databox”。
在您的本地计算机上,您的 X 服务器可能正在侦听端口 6000,因此我们需要将流量返回给它。
workstation $ ssh -R 127.0.0.1:5555:127.0.0.1:6000 natbox
我随意选择了 5555,但任何高于 1024 的未使用值都应该可以工作。您也可以使用 6000,但它使示例比现在更加违反直觉。
第一个 IP/端口对 127.0.0.1:5555 指的是远程机器(natbox)。您的 SSH 会话将打开一个侦听远程计算机上环回接口的端口 5555 的套接字。第二个 IP/端口对 127.0.0.1:6000 指的是您的工作站,这是流量返回的地方。与“natbox”上端口 5555 的连接将通过隧道返回到您的工作站,并尝试连接到本地端口 6000。
natbox $
所以现在我们登录到 natbox,隧道已经建了一半。
natbox $ ssh -R 127.0.0.1:6000:127.0.0.1:5555 databox
这会建立到“databox”的 SSH 连接,在该连接中它会在该服务器的端口 6000 上打开一个侦听套接字,该端口绑定到回送地址。到达该端口的连接将通过 ssh 连接发送回“natbox”,在那里他们将尝试连接到 natbox 的端口 5555...服务器。
databox $ export DISPLAY=:0.0
databox $
完毕。
任何在“databox”上运行的 X 客户端程序都将尝试连接到本地机器在端口 6000 上的显示“0”……这最终会回到您的控制台。
databox $ xterm
这应该从本地显示器上的“数据框”打开一个终端窗口。您不需要这个,但它可能会更容易验证和排除 X 设置故障,而无需将 Oracle 组件拖入组合中。
请注意,ssh 选项上对 127.0.0.1 (以及:
它和第一个端口号之间的)的第一次引用-R
实际上是隐含的,但我将它们包括在内,因为它对我来说似乎不太违反直觉。也可以通过在中间机器上提供“要执行的命令”作为本地机器上“ssh”的最后一个参数,在单个命令行上级联设置它,只要你添加一个-t
到首先 ssh 让它知道你想要一个端到端的 tty ......但它已经足够复杂了,所以我没有包括它。