我正在尝试进行一些 X11 转发,但完全迷失了方向。我找到了很好的答案来解释这个理论:
- $DISPLAY 环境变量是什么?
- https://unix.stackexchange.com/questions/17255/is-there-a-command-to-list-all-open-displays-on-a-machine
- https://superuser.com/questions/368530/understanding-x-windows-display-environment-variable-when-tunnelling
但在实际运用时我还是很落后。
这是我所做的:
- 打开后
mobaxterm
,它会在我的计算机上创建一个 X 服务器(Windows,没关系)。 ssh -X server1
echo $DISPLAY
给出localhost:10.0
xeyes
- 在我的本地机器上打开一个窗口。很好,但是为什么localhost
直接指向我的机器?不应该吗server1
?
据我所知,localhost
等于127.0.0.1
本地地址。那么如果我连接到,server1
它不应该在上查找 X-serverserver1
吗?
答案1
发生这种情况正是因为您执行了 X11转发(或者可以称为 X11隧道)。
您可以启动 X 服务器,连接到远程主机,然后在该远程主机上将 $DISPLAY 设置为指向您的原始计算机。在这种情况下(如果网络、权限等设置正确),您的图形应用程序将尝试连接到您的桌面以在那里显示其窗口,独立从您现有的 ssh 连接,因此可能通过未加密的通道。
相反,发生的情况是,您的应用程序认为它在同一台计算机上显示窗口,并且该应用程序不知道,ssh
捕获该情况并在其自己的加密通道下将操作引导回您的原始计算机。
这种方法的一个优点是流量是加密的。另一个优点是您不必允许其他人(通过适当的身份验证、访问控制)连接到您的计算机,而且即使您的本地计算机无法从远程计算机寻址(例如,位于防火墙后面或位于专用网络上等),它也能正常工作。