通过ssh转发x11后台会发生什么?

当我在主机上运行一个xServer,然后使用ssh连接到另一台机器时,我试图熟悉幕后实际发生的事情: ssh -Y user@machine 。 在这种情况下,我将在Windows上使用cygwin,并将DISPLAY环境variables设置为:0.0并且一旦连接到远程计算机就会运行一个GUI应用程序,这将显示在我的主机上。 Mac将使用本地xServer的石英(抱歉,如果这个术语不正确,但希望你知道我的意思),将使用ssh -X user@machine而不是-Y

这里的目标是拥有一个Docker容器,它只负责安装和运行GUI应用程序。 我将在主机上运行Docker容器,GUI将从目标主机上popup。

我已经通过ssh做了这个工作,并手动在容器中启动一次GUI应用程序。 我只需要知道如何configuration这个香草Linux机器(Docker容器)来转发GUI。 我想了解ssh -Y命令实际上是如何正确设置转发的是我所需要的缺失的难题。 我对.Xauthority文件的存在有一个模糊的理解。 我并不关心连接的安全性。 工作后我会担心的。

X应用程序< – > X服务器

首先,X应用程序如何find并连接到X服务器?

该应用程序读取DISPLAY环境variables以了解如何连接到X服务器。 例如值:0意味着它应该在/tmp/.X11-unix/X0 unix套接字上/tmp/.X11-unix/X0 ,值hostname:5表示连接到计算机hostname TCP端口6005

X服务器可以configuration为从应用程序请求authentication。 通常,当X服务器作为用户会话的一部分启动时,cookie将存储在用户主目录中的.Xauthority文件中,并且只能由用户读取。 通过将cookie发送到X服务器,应用程序certificate它具有读取用户文件的权限,因此也有权查看其显示。 (该文件可以由环境variablesXAUTHORITY设置为不同的path。)

ssh转发

当您使用-X-Y参数ssh到服务器时,ssh将读取本地X服务器的身份validationcookie并将其发送到远程端的ssh服务器。

在远程方面,ssh将使用该cookie创build临时authentication文件,并将XAUTHORITYvariables指向它。 它将开始监听某个本地端口(例如6010 ),并设置DISPLAYvariables指向它(例如localhost:10 )。 如果在该会话中启动任何graphics应用程序,它将连接到ssh(认为它是X服务器),将其连接回本地。

在本地,SSH将任何隧道连接转发到本地X服务器。 (它使用DISPLAYvariablesfind。)

-X-Y之间的区别:远程机器上的恶意根可以从中读取cookie文件中的cookie,并用它连接回X服务器。 如果您使用-X ssh使用X服务器的安全扩展来拒绝应用程序的某些function(如截图或抓取键盘)。 但是一些应用程序可能需要这些工作,所以如果您信任服务器,请使用-Y

替代

顺便说一下,如果networking是完全可信的(如您的机器和虚拟机之间的虚拟networking),您可以完全省略ssh。 您可以设置DISPLAYvariables,以便远程应用程序将通过TCP连接到本地X服务器(Quartz)。 你只需要在你的Quartz中启用TCP监听,并在两侧设置cookie。 这看起来像合理的教程: http : //oroborosx.sourceforge.net/remotex.html