通过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文件,并将XAUTHORITY
variables指向它。 它将开始监听某个本地端口(例如6010
),并设置DISPLAY
variables指向它(例如localhost:10
)。 如果在该会话中启动任何graphics应用程序,它将连接到ssh(认为它是X服务器),将其连接回本地。
在本地,SSH将任何隧道连接转发到本地X服务器。 (它使用DISPLAY
variablesfind。)
-X
和-Y
之间的区别:远程机器上的恶意根可以从中读取cookie文件中的cookie,并用它连接回X服务器。 如果您使用-X
ssh使用X服务器的安全扩展来拒绝应用程序的某些function(如截图或抓取键盘)。 但是一些应用程序可能需要这些工作,所以如果您信任服务器,请使用-Y
。
替代
顺便说一下,如果networking是完全可信的(如您的机器和虚拟机之间的虚拟networking),您可以完全省略ssh。 您可以设置DISPLAY
variables,以便远程应用程序将通过TCP连接到本地X服务器(Quartz)。 你只需要在你的Quartz中启用TCP监听,并在两侧设置cookie。 这看起来像合理的教程: http : //oroborosx.sourceforge.net/remotex.html