在不带 -X 的 ssh 到机器后,是否可以更改 $DISPLAY 使其像 ssh -X 一样工作?

在不带 -X 的 ssh 到机器后,是否可以更改 $DISPLAY 使其像 ssh -X 一样工作?

ssh没有-X机器后,是否可以更改一些设置(例如$DISPLAY)以使其像这样工作ssh -X?如果不是,原因是什么?谢谢。

答案1

您可以在启用 X11 转发的情况下创建第二个连接,然后您还可以DISPLAY在第一个连接中使用第二个连接中的环境变量。

在第一个窗口中:

$ ssh user@host
user@host$ ...

在第二个窗口中:

$ ssh -Y user@host 'echo $DISPLAY; while sleep 3600; do :; done'
localhost:10.0

回到第一个窗口:

user@host$ export DISPLAY=localhost:10.0
user@host$ xterm

不幸的是,ssh它不包含 X11(或其他)转发到它启动的进程/会话或转发到它在远程计算机上运行的用户(例如,通过使用不检查凭据的 Unix 套接字,或通过使用命名空间),这些转发是简单的 TCP 侦听套接字,远程计算机上的任何人都可以连接到该套接字; X11转发的所有安全性都依赖于X11认证。

X11 手动转发

联机sshd_config(5)帮助页提到:

禁用 X11 转发不会阻止用户转发 X11 流量,因为用户始终可以安装自己的转发器。

以下是您可以手动完成此操作的方法。

首先,请确保禁用任何绕过 x11 身份验证机制的基于主机或用户的访问控制 [1]:

$ xhost $(xhost | sed -n /:/s/^/-/p)
access control enabled, only authorized clients can connect

DISPLAY=:0然后显示本地计算机上的身份验证信息:

$ xauth list :0
ohzd/unix:0  MIT-MAGIC-COOKIE-1  a86982ddce0c1e1c1a8c5e8b2846e43b

连接到远程机器,无需任何 X11 转发:

$ ssh user@hzy64
user@hzy64's password:
[motd snipped]

打开命令行via ~C,添加一个从端口6000+43到display对应的unix套接字的远程转发:0

hzy64$~C
ssh> -R 6043:/tmp/.X11-unix/X0
Forwarding port.

设置$DISPLAY环境变量并将身份验证信息从本地添加到远程计算机:

hzy64$ export DISPLAY=localhost:43
hzy64$ xauth add $DISPLAY . a86982ddce0c1e1c1a8c5e8b2846e43b
xauth:  file /home/user/.Xauthority does not exist

现在您已准备好出发:

hzy64$ xterm

[1] 因为误入歧途错误修正,在 Debian 中,基于用户的访问控制默认通过 开启/etc/X11/Xsession.d/35x11-common_xhost-local。更糟糕的是,它是 XWayland 中唯一默认可用的,而且它还无法关闭。任何代理 X11 协议的程序(例如xscope)都必须执行自己的 x11 auth cookie 检查(就像 ssh 所做的那样),除非它想打开一个通向 X11 服务器的漏洞。

相关内容