Laz*_*535 2 authentication x11-forwarding docker
首先:我已经阅读了关于SO的类似问题的答案,但没有一个有效.
情况:
什么有效:
.Xauthority文件复制到其他用户,X11转发也可以.一些设置信息:
DISPLAY 变量在容器中设置(到host-ip-addr:10.0,因为sshd正在侦听的TCP端口6010).tcpdump选中).什么行不通:
X11 connection rejected because of wrong authentication.
xterm: Xt error: Can't open display: host-ip-addr:10.0
我试过的事情:
ssh -Y在机器B上使用选项启动客户端ssh"X11ForwardTrusted yes"在机器B上放入ssh_configxhost + (因此允许任何客户端连接)在机器B上Host *在机器B上放入ssh_configX11UseLocalhost no在机器A上放入sshd_config(允许非localhost客户端)xauth add使用计算机A上的登录用户在容器中添加X身份验证令牌.Xauthority文件从工作用户复制到容器中即可.Xauthority文件具有正确的权限和所有者我怎样才能禁用所有X安全性的东西并让它工作?
甚至更好:我怎样才能让它与安全性一起工作?
是否至少有一种方法可以进行大量调试,以确定问题的确切位置?
非常感谢@Lazarus535,
我发现对我来说,将以下内容添加到我的 docker 命令中是有效的:
--volume="$HOME/.Xauthority:/root/.Xauthority:rw"
我在这里找到了这个技巧
编辑:
正如 Lazarus 正确指出的那样,您还必须设置--net=host选项才能使其工作。
这适用于任何场景。
xhost如果没有,请安装。然后,在bash中,
export DISPLAY=:0.0
xhost +local:docker
Run Code Online (Sandbox Code Playgroud)
在此之后运行您的docker run命令(或您正在运行的任何 docker 命令)-e DISPLAY=$DISPLAY
好的,这是事情:
1)登录远程机器
2)检查设置了哪个显示器 echo $DISPLAY
3)跑 xauth list
4)复制与您对应的行 DISPLAY
5)输入您的泊坞窗容器
6)xauth add <the line you copied>*
7)设置DISPLAY export DISPLAY=<ip-to-host>:<no-of-display>
*到目前为止还不错?
这不是什么新鲜事......但是这里有一个转折点:xauth list登录用户打印的行看起来像这样(在我的例子中):
<hostname-of-machine>/unix:<no-of-display> MIT-MAGIC-COOKIE-1 <some number here>
Run Code Online (Sandbox Code Playgroud)
因为我使用桥接docker设置,X转发端口不在本地侦听,因为sshd没有在容器中运行.将上面的行更改为:
<ip-of-host>:<no-of-display> MIT-MAGIC-COOKIE-1 <some number here>
Run Code Online (Sandbox Code Playgroud)
实质上:删除/unix部分.
<ip-of-host> 是运行sshd的IP地址.
像上面一样设置DISPLAY变量.
所以错误是DISPLAY环境变量中的名称与xauth list/ .Xauthorityfile中的条目不是"相同",客户端因此无法正确进行身份验证.
我切换回不受信任的X11转发设置.
X11UseLocalhost no然而,sshd_config文件中的设置很重要,因为接收连接将来自"不同"的机器(docker容器).
它通常通过/sf/answers/4274236991/工作
ssh -X但是,如果您使用与服务器中使用的用户不同的用户运行 docker ;那么复制 Xauthority 仅有助于映射文件的卷。
示例 - 我使用用户 sshed 进入服务器。alex然后运行 dockersu -root并收到此错误
X11 connection rejected because of wrong authentication.
复制 .XAuthoirty 文件并将其映射为/sf/answers/3584668251/后,它就可以工作了
cp /home/alex/.Xauthority .
docker run -it --network=host --env DISPLAY=$DISPLAY --privileged \
--volume="$HOME/.Xauthority:/root/.Xauthority:rw" \
-v /tmp/.X11-unix:/tmp/.X11-unix --rm <dockerimage>
Run Code Online (Sandbox Code Playgroud)
有关接线的更多详细信息,请参见此处https://unix.stackexchange.com/a/604284/121634
| 归档时间: |
|
| 查看次数: |
4753 次 |
| 最近记录: |