在Docker中运行的GUI应用程序的X11转发
首先:我已经阅读了类似的问题的答案,但没有一个工作。
情况:
- 使用GUI的应用程序在Arch Linux下的Docker容器(CentOS 7.1)中运行。 (机器A)
- 机器A有一个监视器连接到它。
- 我想通过我的Arch Linux客户机上的X11转发来访问这个GUI。 (机器B)
什么工作:
- GUI在本地机器A上工作(将/tmp/.X11-unix安装在Docker容器中)。
- X11转发任何在Docker外部运行的应用程序(X11转发设置并正确运行,以便非docker使用)。
- 我甚至可以在远程login时切换用户,将
.Xauthority
文件复制到其他用户,X11转发也可以。
一些设置信息:
- Dockernetworking被“桥接”。
- 容器可以到达主机(防火墙已打开)。
- 在容器中设置
DISPLAY
variables(因为sshd正在侦听的TCP端口6010,所以host-ip-addr:10.0)。 - 数据包到X转发端口(6010)从容器到达主机(
tcpdump
被选中)。
什么不行:
- X11转发Docker应用程序
- 错误:
X11 connection rejected because of wrong authentication.
xterm: Xt error: Can't open display: host-ip-addr:10.0
我试过的东西:
- 在机器B上用
ssh -Y
选项启动客户端ssh - 在机器B的ssh_config中放入
"X11ForwardTrusted yes"
- 机器B上的
xhost +
(允许任何客户端连接) - 将
Host *
放在机器B的ssh_config中 - 在机器A的sshd_config中放入
X11UseLocalhost no
(允许非本地主机客户机) - 在机器A上从login用户
xauth add
容器中的X身份validation令牌 - 只需将工作用户的
.Xauthority
文件复制到容器中即可 - 使舒尔
.Xauthority
文件具有正确的权限和所有者
我怎样才能禁用所有的X安全的东西,并得到这个工作?
或者甚至更好:我如何才能使它安全工作?
是否至less有一种方法来启用广泛的debugging,看看问题到底在哪里?
好的,这是事情:
1)login到远程机器
2)检查使用echo $DISPLAY
设置的echo $DISPLAY
3)运行xauth list
4)复制与您的DISPLAY
对应的行
5)input您的docker集装箱
6) xauth add <the line you copied>
*
7)使用export DISPLAY=<ip-to-host>:<no-of-display>
设置DISPLAY export DISPLAY=<ip-to-host>:<no-of-display>
*迄今如此好的权利?
这不是什么新东西……但是这里是扭曲:由login用户的xauth list
打印的行看起来像这样(在我的情况):
<hostname-of-machine>/unix:<no-of-display> MIT-MAGIC-COOKIE-1 <some number here>
因为我使用桥接docker设置,X转发端口不在本地监听,因为sshd没有在容器中运行。 将上面的行更改为:
<ip-of-host>:<no-of-display> MIT-MAGIC-COOKIE-1 <some number here>
实质上:删除/unix
部分。
<ip-of-host>
是sshd运行的IP地址。
如上设置DISPLAYvariables。
所以错误在于环境variables中的DISPLAY
名称与xauth list
/ .Xauthority
文件中的条目不是“相同的”,因此客户端可能无法正确地进行身份validation。
我切换回不可信的X11转发设置。
然而,sshd_config文件中的X11UseLocalhost no
设置很重要,因为input连接将来自“不同”的机器(docker容器)。
- Dockerlogin错误与入门教程
- Docker:什么是保护私人registry最简单的方法?
- 鉴于下面描述的错误,人们如何在Ubuntu / Docker的ASP.NET Core Web API中进行身份validation?
- Zypper存储库authentication(非交互式)
- 与SQL和匿名奇怪的行为Ejabberdauthentication
- 匿名的在artifactory中的docker回购
- 如何通过用户名和密码保护在Docker容器中运行的Web应用程序?
- docker群和使用api密钥的aws ecrauthentication
- Docker中运行的Dotnet核心Web API在使用外部WCF服务时无法进行身份validation