ネットワークネームスペース、ssh、X11

ネットワークネームスペース、ssh、X11

ssh -Y ...あるコンピュータ(=クライアント)から別のコンピュータ(=サーバー、実際には私のLANにはありますが関係ありません)に接続し、サーバー(=サーバー)NNSで新しいネットワーク名前空間を起動します。 (デフォルトの名前空間で)xtermを起動すると、私のクライアントに完全に表示され、最後にxtermでデフォルト以外のNSSを追加します。

ip netns exec NNSName bash

新しい NNS にいることを確認でき、

ip netns identify $$

新しい NNS では、OpenVPN などの複雑なプログラムを実行できます。

問題は次のとおりです。新しいNNSでグラフィカルアプリケーションを起動したいのですがxeyes(一時的に)実行できません。常に次のような言葉を聞いてください。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内でグラフィカルアプリケーションを起動してサーバーに表示します(つまり(この場合、クライアントは忘れてください)。

これら2つ(sshと名前空間)を組み合わせて使用​​すると、サーバーの新しいNNSで実行されているクライアントアプリケーションに表示されることはできません。

標準のTCPポート6010はネイティブNNSを持つsshセッションに属しているようですが、新しいNNSには独自のポートが必要です。もちろん、新しい NNS で ssh サーバーを起動し、クライアントからサーバーの新しい NNS に直接接続できますが、疑問に思います。これを行うより簡単な方法はありますか?つまりクライアントのX11サーバー上のサーバーの新しいNNSで実行されているグラフィックアプリケーションを表示しますか?

ベストアンサー1

私は同様の状況に直面し、これが私の解決策でした。

背景情報:異なるIPアドレスにバインドするには、名前空間内で複数のSelenium Firefoxインスタンスを拡張する必要があります。しかし、ご存知のようにエラーが発生しました。

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-wantを使用できます。

ip netns exec my-NNS xeyes &

望むより!

おすすめ記事