網路命名空間、ssh、X11
我從一台機器(=客戶端)連接(通過
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 +
在客戶端上,用於純調試目的。我沒有問題:
- 通過
ssh -Y ....
從客戶端連接到伺服器,xeyes
在伺服器上執行並在客戶端上顯示它;- 在伺服器上啟動一個新的 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 &
就在這裡!