考虑这样一种情况:我通过 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
使用 Xephyr 启动额外的 X 服务器。这是为了安全——它可以防止远程系统损害您的系统。
使用 SSH 将远程套接字转发到 Xephyr 套接字。 SSH 也支持转发 Unix 套接字。
正确设置远程服务器上的环境变量。