Ssh

網路命名空間、ssh、X11

  • August 23, 2016

我從一台機器(=客戶端)連接(通過ssh -Y ...)到另一台機器(=伺服器,實際上在我的區域網路中,但這無關緊要);然後我在伺服器上啟動一個新的網路名稱空間(簡稱 NNS),我啟動一個在我的客戶端上完美顯示的 xterm(來自預設名稱空間),最後,從 xterm 中,我加入非預設 NNS ,

ip netns exec NNSName bash

我可以檢查我是否在新的 NNS 中,

ip netns identify $$

我可以在新的 NNS 中執行複雜的程序,例如 OpenVPN。

問題就在這裡:我想xeyes從新的 NNS 中啟動一個圖形應用程序(即使只是暫時),但我不能,總是被告知:Unable to open DISPLAY=...

誠然,我只嘗試了明顯的:

DISPLAY=:0.0
DISPLAY=:10.0
DISPLAY=localhost:10.0
DISPLAY=localhost:20.0
DISPLAY=ClientName:10.0
DISPLAY=ClientIPAddress:10.0

始終xhost +在客戶端上,用於純調試目的。

我沒有問題:

  1. 通過ssh -Y ....從客戶端連接到伺服器,xeyes在伺服器上執行並在客戶端上顯示它;
  2. 在伺服器上啟動一個新的 NNS,並在 NNS 中啟動圖形應用程序以顯示在伺服器上(,在這種情況下忘記客戶端)。

當我將這兩個東西(ssh 和命名空間)放在一起時,我無法在伺服器的新 NNS 中執行的客戶端應用程序上顯示。

看來標準 TCP 埠 6010 屬於具有預設 NNS 的 ssh 會話,而新的 NNS 應該擁有自己的。我當然可以在新的 NNS 中啟動一個 ssh 伺服器並直接從客戶端連接到伺服器的新 NNS,但我想知道:有沒有更簡單的方法可以做到這一點,顯示在伺服器的新 NNS 中執行的圖形應用程序客戶的 X11 伺服器?

我遇到了類似的情況,這就是我如何解決它。

一些背景知識:我必須在命名空間中跨越多個 selenium Firefox 實例,以便將它們綁定到不同的 IP 地址。但如你所知,我遇到了錯誤:

Error: Can't open display: localhost:10.0

我沒有像 Marius 建議的那樣使用 unix 套接字,而是將 SSHD X11Forwarding 綁定到 * 而不是 localhost(將“X11UseLocalhost no”添加到配置中)並使用 socat 重定向簡單的 TCP 連接。

注意這樣做的安全後果!!!!

在 sshd 上進行此更改後,當您從這裡登錄時,顯示將自動更改:

DISPLAY=localhost:10.0

類似於:

DISPLAY=10.0.0.1:10.0

之後,我只需要重定向:

ip netns exec my-NNS socat tcp-listen:6010,reuseaddr,fork tcp:192.168.5.130:6010 &

那麼你應該能夠使用 xeyes、firefox、x-whatever-you-wan…:

ip netns exec my-NNS xeyes &

就在這裡!

引用自:https://unix.stackexchange.com/questions/242146