Linux

在未安裝 X-server 的情況下使用一跳轉發 X11

  • July 1, 2015

問題

我想從我的客戶端 A 在機器 C 上遠端執行 X 應用程序。連接到這台機器的唯一方法是使用機器 B(防火牆)作為躍點:

A –> B –> C

到目前為止,簡單的 ssh 按預期工作,但是我無法執行 X11 轉發。

我發現了一些類似的問題,但我認為他們都假設 X11 正在 B 上執行。解決方案如如何通過附加伺服器啟用 SSH X11 轉發?似乎不適用於我的設置。

您是否需要在 B 上執行 X-server 才能將 X11 從 C 轉發到 B 並將 B 轉發到 A?

設置

根據這篇文章,我已經在 A 上設置了我的 ~./ssh/ssh_config:http: //sshmenu.sourceforge.net/articles/transparent-mulihop.html

當我嘗試通過使用從 C 連接和轉發 X11

$A: ssh -X C

我通過 B 連接到 C,但沒有 X11 轉發(儘管在 B 和 C 上啟用):

$C: echo $DISPLAY

$C: glxgears 
Error: couldn't open display (null)

使用的機器

  • A: Arch Linux 3.13.7-1-ARCH notebook 執行 X-server/gnome
  • B: Debian 6 Linux 2.6.32-5-amd64 pc 沒有安裝/執行 X-server
  • C: OpenSuse 13.1 3.11.10-7-desktop pc 執行 X-server/gnome

結論

我不確定是否由於我的配置/設置而存在問題,或者這通常不會說…如果有類似問題/經驗的人可以幫助我,我將不勝感激!

我不相信 X11 轉發將在所描述的多跳場景中工作。

但是,如果您要首先建立一個 ssh 連接 A->B 並將埠轉發到 C:22,然後通過已建立的“直接”連接使用 X11 轉發連接到 C,應該可以正常工作。

類似於以下內容:

A $ ssh -L2200:C:22 -N B(可能把它放在後台)

其次是:

A $ ssh -X -p2200 localhost

如果您使用的是 ProxyCommand,則不要將 -X 用於 ProxyCommand。ProxyCommand 應該禁用所有高級功能,您只需要 ProxyCommand 的最低要求。

當使用 ProxyCommand 從 A ssh 到 B 並使用 nc 連接到 C 上的埠 22 時,A 上的 ssh 客戶端將與 C 上的 ssh 伺服器通信。這意味著在 B 上發生的任何事情都不會影響哪些功能您可以在 A 和 C 之間使用。B 不可能有任何影響,因為通信在通過 B 時是加密的。

為什麼 X11 轉發對你不起作用的解釋必須在 A 或 C 上找到。你在 A 上鍵入的命令對我來說看起來是正確的,所以剩下兩個解釋,我能想到:

  1. 您在 shell 中沒有 DISPLAY 變數,您在其中鍵入了 ssh 命令。
  2. C 上的 ssh 伺服器配置為禁止 X11 轉發。您需要在 C 的 sshd_config 中設置“X11Forwarding yes”,否則將無法正常工作。

引用自:https://serverfault.com/questions/585331