为什么 MobaXterm 设置 DISPLAY 变量以及如何设置,而不是 VS code?

为什么 MobaXterm 设置 DISPLAY 变量以及如何设置,而不是 VS code?

我正在尝试使用带有远程插件的 VS Code 进行过渡,以便在 Linux VM 上进行开发。然而,我正在努力解决与 DISPLAY 变量相关的问题。不知何故,在使用 MobaXterm SSH 连接到服务器的过程中,DISPLAY 变量设置正确。但是,当我使用 VS code ssh 到同一服务器时,它根本没有设置。我可以手动设置 DISPLAY 变量,但是使用 MobaXterm 时是如何完成的?我在设置对话框中没有看到任何指示该值的内容,因此我不知道如何复制此过程以在通过 Visual Studio Code 进行 SSH 连接期间自动设置 DISPLAY。连接到多个虚拟机时,DISPLAY 变量有时会不同。有时它是:14.0,有时是:10.0,所以看起来在配置文件中对其进行硬编码并不是一个好主意。那么应该如何设置呢?

我的远程连接 SSH 配置文件如下所示,只是我为目标编造了假名称。

Host server-10
  HostName server-10
  IdentityFile C:\\Users\\my.user.name\\.ssh\\id_rsa
  ForwardX11 yes
  ForwardX11Trusted yes

答案1

MobaXterm 的主要目的是启用 X11 GUI 应用程序,因此它包含一个 X11 显示服务器。所以它的SSH客户端组件默认请求X11转发。

另一方面,VS Code 不包含 X11 服务器,并且不会请求 X11 转发,除非-X-Y通过-XY输入SSH连接命令迅速的。

当 X11 通过 SSH 转发时,会发生以下情况:

1.) SSH 客户端连接到本地 X11 显示服务器(在 Windows 中,通常通过与端口 6000 建立本地 TCP 连接,除非另有指定)并验证其可访问。

2.) 当与远程SSH服务器协商连接时,客户端请求X11转发。如果远程 SSH 服务器接受请求,它将设置一个本地 X11 代理,在端口 6010 或之后的第一个空闲端口上侦听本地连接。它将DISPLAY在远程端设置环境变量,通常为localhost:<X11 proxy port number - 6000>.它还将提供一个~/.Xauthority带有虚拟 MIT-MAGIC-COOKIE 会话密钥的文件。

3.) 当远程 X11 应用程序启动时,它将看到DISPLAY环境变量和~/.Xauthority文件,并按照它们的指示,建立与远程 SSH 服务器创建的代理的 X11 连接。

4.) 代理端口将接受 X11 连接(通常仅在同一主机内),验证会话密钥,并将加密 SSH 隧道内的 X11 流量传递到本地 SSH 客户端。

5.) 本地 SSH 客户端将用实际本地 X11 服务器所需的 cookie 替换远程虚拟 cookie(如果需要),并将本地流量转发到 X11 显示服务器。任何回复都将以同样的方式发回。

远程 X11 端口号和相应的DISPLAY变量值取决于远程服务器上有多少其他现有 SSH 转发的 X11 连接(以及 6010+ 范围内 TCP 端口的可能其他用户)。因此,对 DISPLAY 变量进行硬编码确实不是一个好主意。

适用于 Windows 的 X410 X11 服务器有一本带有图片的说明书,用于使用 VS Code 设置 X11 连接:https://x410.dev/cookbook/enabling-ssh-x11-forwarding-in-visual-studio-code-for-remote-development/

您可以使用任何 Windows X11 显示服务器,但原理是相同的。


如果您的本地 X11 显示服务器接受端口 6000/TCP 中的直接远程 X11 连接,那么从技术上讲,您可以手动将远程DISPLAY变量设置为<IP or hostname of the local system>:0。然而,你不应该这样做除非您绝对信任任何能够连接到您的本地系统的人:这会设置一个未加密的X11连接,很容易被窃听。

恶意远程 X11 连接也可以充当键盘记录器对于您的整个本地显示,因此您不应允许不属于您自己会话的合法部分的应用程序连接到您的 X11 显示服务器。 X11 会话 cookie 机制旨在防止出现以下情况:除非远程应用程序可以生成仅提供给您的用户帐户的特定于会话的 cookie,否则 X11 连接将被断开。

实际上,自 2000 年以来我见过的所有 Linux 发行版都早已将其 X11 服务器配置为默认拒绝任何未加密的远程 X11 连接,但 Windows X11 服务器可能还没有这样做。

相关内容