2017-06-08 68 views
0

首先:我已经阅读了关于SO的类似问题的答案,但没有一个能够工作。X11转发在Docker中运行的GUI应用程序

局势:

  • 应用使用GUI在下Arch Linux的码头工人容器(CentOS的7.1)运行。 (机器A)
  • 机器A有一个监视器连接到它。
  • 我想通过我的Arch Linux客户端机器上的X11转发来访问此GUI。 (设备B)

什么工作:

  • GUI本地工作机器A(与安装在所述容器多克尔/tmp/.X11-unix)。
  • X11转发任何在Docker外部运行的应用程序(X11转发设置并正确运行以实现非泊坞窗使用)。
  • 我甚至可以在远程登录时切换用户,将.Xauthority文件复制到其他用户,X11转发也可以。

一些设置信息:

  • 泊坞网络是 '桥'。
  • 容器可以到达主机(防火墙已打开)。
  • DISPLAY变量在容器中设置(由于sshd正在侦听的TCP端口6010,因此host-ip-addr:10.0)。
  • 到X前向端口(6010)的数据包正从容器到达主机(选中tcpdump)。

什么不起作用:

    泊坞窗应用的
  • X11转发
  • 错误:

X11 connection rejected because of wrong authentication.

xterm: Xt error: Can't open display: host-ip-addr:10.0

事情我尝试:

  • 启动客户端SSH与机器B ssh -Y选项
  • "X11ForwardTrusted yes"在ssh_config中对机器B
  • xhost +机器B(所以允许任何客户端连接)
  • Host *在ssh_config中的机器B
  • X11UseLocalhost no放在机器A的sshd_config中(允许非本地主机客户端)
  • 将第在容器E X的身份验证令牌与xauth add从机器上登录用户A
  • 只复制过.Xauthority文件从工作用户进入容器
  • 使舒尔.Xauthority文件具有正确的权限和所有者

我怎么才能禁用所有的X安全的东西,并得到这个工作?

甚至更​​好:我如何才能使它与安全性一起工作?

是否至少有一种方法可以启用广泛的调试来查看问题的确切位置?

回答

2

确定,这里是一点:

1)登录到远程机器

2)检查哪个显示设定与echo $DISPLAY

3)运行xauth list

4)复制该行对应于您的DISPLAY

5)输入您的码头集装箱

6)xauth add <the line you copied> *

7)设置显示屏,export DISPLAY=<ip-to-host>:<no-of-display>

*到目前为止好权?

这不是什么新鲜事......然而,这里是扭曲: 由xauth list登录用户打印的行看起来是这样的(在我的情况):

<hostname-of-machine>/unix:<no-of-display> MIT-MAGIC-COOKIE-1 <some number here> 

因为我用桥接泊坞窗设置中,X转发端口不在本地监听,因为sshd没有在容器中运行。将上面的行更改为:

<ip-of-host>:<no-of-display> MIT-MAGIC-COOKIE-1 <some number here> 

本质上:删除/unix部分。

<ip-of-host>是sshd正在运行的IP地址。

如上设置DISPLAY变量。

因此,错误是环境变量中的DISPLAY名称与xauth list/.Xauthority文件中的条目不同,因此客户端可能无法正确进行身份验证。

我切换回不可信的X11转发设置。

然而,sshd_config文件中的X11UseLocalhost no设置非常重要,因为传入的连接将来自“不同”的计算机(docker容器)。

相关问题