Windows WSL 上的 Ubuntu +Xming:可以通过 ssh + 命令打开 GUI,但不能在 SSH 会话期间打开

Windows WSL 上的 Ubuntu +Xming:可以通过 ssh + 命令打开 GUI,但不能在 SSH 会话期间打开

快速解答问题

  • 在主机上,不要DISPLAY=在此处放置任何语句。如果存在,远程主机将尝试在其自己的显示端口上呈现 GUI;
  • 在客户端机器上,请export DISPLAY=127.0.0.1:0.0在 中 指定~/.bashrc。此DISPLAY变量应与Xming客户端机器上运行的 匹配。

然后,只需使用标志连接到主机-X,即可免费访问远程机器上的所有 GUI 程序!


下面的冗长的描述中出了什么问题:

  • 正如其中一条评论所澄清的那样,不应DISPLAY在远程主机上设置变量。这样做有点过分,因为它会混淆 GUI 的呈现方式。
    • 删除DISPLAY在主机上设置变量的行解决了我的问题。

我已通过在中指定以下内容将 Linux Mint 机器设置为拾取 X11Forwarding /etc/ssh/sshd_config,但是,我无法使用在 Windows 10 上作为 WSL 托管的 Ubuntu 18.04.1 LTS 访问服务器。

X11Forwarding yes
X11UseLocalhost no
AllowAgentForwarding yes
X11DisplayOffset 10
AddressFamily inet

但是,使用 登录到 Linux Mint 机器后,我无法启动任何具有 GUI 的程序。在 SSH 会话期间ssh -Y address_of_remote_server尝试启动时出现以下错误消息:gvim

在此处输入图片描述

但是,我可以gvim通过组合命令来启动,如下所示:ssh -Y address_of_remote_server gvim。没有提示任何错误。请告知需要调整哪些设置来帮助我打开 GUI 程序期间SSH 会话。


更多细节:

  • 在本地机器上,我使用在 Windows 10 上安装为 WSL 的 Ubuntu 发行版。
    • 对于 X-server,我尝试了 Xming 和 X410。两者都可以通过显示端口托管(本地)GUI 程序:(127.0.0.1:0.0远程机器上的设置也是如此。)
  • 在远程 Linux Mint 机器上,我export DISPLAY=127.0.0.1:0.0也进行了设置;ssh + command (gvim)如果没有该部件,它就无法工作127.0.0.1

更新,带-X标志

我应该选择使用 flag 来展示演示。在我的例子中,使用和-X连接 SSH 连接是相同的。它们都设置了变量: -X-Y$DISPLAY在此处输入图片描述

类似地,将连接语句与gvim命令结合起来,我得到了一个生动的 Gvim 窗口。而且,我先连接,然后发出gvim命令,却得到了以下错误: 在此处输入图片描述


客户端设置更新

在客户端机器上~/.ssh/config,我已经设置了:

host 10.0.0.168
    ForwardX11 yes
    Port 22990 #This is a fake port.
    User llinfeng
    PubKeyAuthentication yes
    IdentitiesOnly yes
    IdentityFile ~/.ssh/MyRSA_Key

但是,进入 SSH 会话后,我无法启动任何 GUI 程序。同样,启动组合命令确实会产生一个功能齐全的 GUI(ssh -X 10.0.0.168 gvim将创建一个 GVIM 窗口)。

答案1

X11Forwarding您不能通过在任何文件中放置条目来强制客户端启用sshd_config,而是需要ForwardX11在客户端计算机上启用,并且ssh 不是 sshd. X11Forwarding需要在服务器上启用,但这并不意味着它是强制执行的。

您可以通过编辑~/.ssh/config用户并为远程服务器添加主机条目来执行此操作:

Host theserver
Hostname 192.168.1.1
User username
ForwardX11 yes
PubKeyAuthentication yes
IdentityFile ~/.ssh/some_key
IdentitiesOnly yes

现在您可以运行$ ssh theserverForwardX11处于活动状态。使用-X/-Y标志时,您将ForwardX11在客户端上激活,与设置配置相同。无论哪种方式,您都需要ForwardX11在客户端上启用,并且它是不是建议对整个系统内的所有主机都执行此操作,而不是有选择地对每个主机执行此操作。

不要乱动,DISPLAY并允许你的客户端和系统设置一切。你可能试图修复一些东西并添加了它,但删除它并尝试简单地使用-X/-Y标志,或为特定主机配置 X11 转发,或在运行时使用标志。

您可以阅读有关 X11 转发的安全隐患的更多信息这里以及其他地方。

答案2

答案很简单,只需使用 -X 标志进行连接即可:

ssh -X me@myserver

这应该会为您设置适当的显示变量。您可以看到该值如下:

echo $DISPLAY

当我 ssh 进入我的主机时,我得到了 DISPLAY 的这个值:

localhost:10.0

您的服务器配置文件中的内容可能比您需要的多。我的配置文件中只有以下内容:

SendEnv LANG LC_*
HashKnownHosts yes
GSSAPIAuthentication yes
GSSAPIDelegateCredentials no

尝试将您的 ssh 配置文件精简为这些简单值。

此外,-p 22 是不必要的,因为端口 22 是 ssh 的默认端口。

这里有更多信息:Stack Exchange:转发 X

最后,可以从手册页中学到很多东西:

man ssh

相关内容