如果服务器配置不允许,则通过 SSH 转发 X11

如果服务器配置不允许,则通过 SSH 转发 X11

考虑这样一种情况:我通过 SSH 从机器 A 登录到机器 B,我在机器 A 上有一个 X 会话,并且我想在 B 上运行 X 程序。

ssh -X B使这项工作透明化。但如果服务器配置缺少X11Forwarding yes,我在服务器上没有root权限,服务器管理员也无动于衷怎么办?

显然可以转发 X11 连接,因为我可以通过 SSH 通道传输我想要的任何内容。事实上,如果本地 X 服务器允许 TCP 连接,就很简单ssh -R 6010:localhost:6000(根据显示数量进行调整)。本地 X 服务器只允许套接字连接的常见情况又如何呢?如何方便、安全地进行 X 转发,且安装要求最低(尤其是在 B 上)?

答案1

X11 与 tcp 端口通信时使用的协议与与套接字通信时使用的协议有什么不同吗?

也许您可以结合您自己建议的用途,ssh -R 6010:localhost:6000通过端口转发引入 X11 数据,然后使用 nc 桥接 tcp 端口和 X11 套接字侦听器之间的本地 gab,如下所示:

nc -l -p 6000 > /tmp/.X11-unix/X0

答案2

@Demi 的答案很好,但我认为填写它会有很大帮助。

  • local——服务于 Xserver 的本地机器。
  • 远程——为应用程序提供服务的远程计算机,该应用程序将数据发送到 Xserver

偏僻的/etc/ssh/sshd_config

X11Forwarding no
X11DisplayOffset 10
X11UseLocalhost yes

远程~/.Xauthority为空或不存在

在本地:

Xephyr -ac -screen 1280x800 -br -reset   :2 &
DISPLAY=:2 ssh  -fR 6010:/tmp/.X11-unix/X2  user@remote "DISPLAY=:10 xeyes"

在测试中,本地运行的是 Ubuntu 18.05,远程运行的是 Debian Jesse。

答案3

  1. 使用 Xephyr 启动额外的 X 服务器。这是为了安全——它可以防止远程系统损害您的系统。

  2. 使用 SSH 将远程套接字转发到 Xephyr 套接字。 SSH 也支持转发 Unix 套接字。

  3. 正确设置远程服务器上的环境变量。

相关内容